четвъртък, юни 24, 2010

Използване на CI Active Record в скрипт извън CodeIgniter


Добре, ясно, ползвате CodeIgniter и ви се налага да напишете някакъв малък скрипт (примерно нещо, което ще се изпълнява с cron) и се налага да правите някакви си нещица с базата данни.

Правите си една папка "scripts" и започвате да блъскате вътре някакви неща. Въпроса, е че вече сте свикнали с Active Record библиотеката на CodeIgniter и искате да продължите да си я ползвате вместо омразните - mysql_query(), mysql_fetch_object() и т.н.
Оказа се, че това става доста лесно :

// set paths
$current_path = __DIR__;
$current_path = str_replace("\\", '/', $current_path); // w32 paths
// тук може би ще ви трябва още малко оправяне на пътищата :)

define(PROJPATH, $current_path . "/");
define(BASEPATH, $current_path . "/system/");
define(APPPATH, PROJPATH . 'application/');
define(EXT, '.php');

// load active record DB
include(BASEPATH . 'codeigniter/Common.php');
include(BASEPATH . 'database/DB.php');
$db =& DB();



Това е. Вече имате променлива $db и можете да си ползвате любимия $db->get() :)

Уточнение: Ако пътищата ви се струват странни: при мен system и application папките са на едно равнище във файловата структура и за това съм си дефинирал константа PROJPATH която е един вид ../system и ../application.
структурата е нещо като :
/project
//application
//system
//scripts
При този начин на зареждане Active Record ще ползва стандартните настройки за връзка с базата данни в /application/config/database.php, тоест няма нужда ръчно да задавате отново username, pass и db.