发现opencart的数据访问太原生态了,代码冗余,可读性差,准备把codeigniter3的数据访问类集成进来,总共4个步骤:
1. 拷贝codeigniter的system/database整个目录到opencart的system/library下
2. 新建一个文件system/library/db_ci.php
<?php
define('BASEPATH', dirname(__FILE__).'/../../system/library/');
define('EXT', '.php');
class DB_CI {
private static $instance;
public static function get_instance($db_driver, $db_host, $db_username, $db_password, $db_name, $db_prefix) {
if(self::$instance == null) {
require_once(BASEPATH . 'database/DB' . EXT);
$params = array(
'dbdriver' => $db_driver,
'hostname' => $db_host,
'username' => $db_username,
'password' => $db_password,
'database' => $db_name,
'dbprefix' => $db_prefix,
'pconnect' => FALSE,
'db_debug' => FALSE,
'cache_on' => FALSE,
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
);
self::$instance = DB($params,TRUE);
}
return self::$instance;
}
}
3. opencart2: index.php文件,在 $registry->set('db', $db); 之后添加下面2行(为了和原生的$db区分开,我这里使用的$db_ci)
opencart3: system/framework.php,在 $registry->set('db' ……之后添加
// 集成codeigniter的数据访问
$db_ci = DB_CI::get_instance(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PREFIX);
$registry->set('db_ci', $db_ci);
4. 加入codeigniter的系统错误输出函数,system/helper/general.php末尾添加
/*
* 集成codeigniter的数据访问类,数据库错误显示,需要用到该函数
* */
function log_message($level = 'error', $message, $php_error = FALSE)
{
//echo($message);
$handle = fopen(DIR_LOGS . 'error_sql.log', 'a');
fwrite($handle, date('Y-m-d G:i:s') . ' - ' . print_r($message, true) . "\n");
fclose($handle);
}
完毕,所有要使用的地方,就用$this->db_ci->
比如插入数据:
$this->db_ci->insert('表名', $data);
$last_id = $this->db_ci->insert_id();
其他方法请自行查看codeigniter的数据访问手册。