CI(Codeigniter)的Setting增强配置类实例
本文实例讲述了Codeigniter的Setting增强配置类。分享给大家供大家参考,具体如下:
该增强配置类适用配置项要求比较灵活的项目。可实现预加载配置、组配置、单项调取、增、删、改配置,无需在改动config文档。
使用:
在需要的地方
$this->load->library('setting');对于预加载项可以使用
$this->config->item();进行获取
对于临时调取项可以使用
$this->setting->item();进行获取
首先,创建数据表
CREATETABLE`system_settings`(
`id`int(11)unsignedNOTNULLAUTO_INCREMENT,
`key`varchar(64)NOTNULLDEFAULT'',
`value`mediumtextNOTNULL,
`group`varchar(55)NOTNULLDEFAULT'site',
`autoload`enum('no','yes')NOTNULLDEFAULT'yes',
PRIMARYKEY(`id`,`key`),
KEY`name`(`key`),
KEY`autoload`(`autoload`)
)ENGINE=MyISAMAUTO_INCREMENT=11DEFAULTCHARSET=utf8;
然后,在application/libraries目录下创建setting.php,内容如下
<?php
if(!defined('BASEPATH'))
exit('Nodirectscriptaccessallowed');
classSetting{
private$_ci;
private$settings_autoloaded;
private$settings=array();
private$settings_group=array();
private$settings_db;
publicfunction__construct(){
$this->_ci=&get_instance();
$this->settings_db=$this->_ci->config->item('settings_table');
$this->autoload();
}
//------------------------------------------------------------------------
//华丽的分割线正式开始
//------------------------------------------------------------------------
/**
*从数据库获取所有自动加载的设置
*/
publicfunctionautoload(){
//如果存在则直接返回
if(!empty($this->settings)){
return$this->settings;
}
//如果系统不存在数据表则返回false
if(!$this->_ci->db->table_exists($this->settings_db)){
returnFALSE;
}
//查询标记为自动加载的项
$this->_ci->db->select('key,value')->from($this->settings_db)->where('autoload','yes');
$query=$this->_ci->db->get();
if($query->num_rows()==0){
returnFALSE;
}
//循环写入系统配置
foreach($query->result()as$k=>$row){
$this->settings[$row->key]=$row->value;
$this->_ci->config->set_item($row->key,$row->value);
}
//标记会话,避免重复读库
//$this->_ci->session->set_userdata('settings_autoloaded',TRUE);
return$this->settings;
}
//------------------------------------------------------------------------
/**
*获取单个设定
*
*<code>
*<?php$this->settings->get('config_item');
?>
*</code>
*/
publicfunctionitem($key){
if(!$key){
returnFALSE;
}
//首先检查是否系统已经自动加载
if(isset($this->settings[$key])){
return$this->settings[$key];
}
//查询数据库
$this->_ci->db->select('value')->from($this->settings_db)->where('key',$key);
$query=$this->_ci->db->get();
if($query->num_rows()>0){
$row=$query->row();
$this->settings[$key]=$row->value;
return$row->value;
}
//查询不到结果则查找系统config,返回值或者false
return$this->_ci->config->item($key);
}
//------------------------------------------------------------------------
/**
*获取组配置
*/
publicfunctiongroup($group=''){
if(!$group){
returnFALSE;
}
$this->_ci->db->select('key,value')->from($this->settings_db)->where('group',$group);
$query=$this->_ci->db->get();
if($query->num_rows()==0){
returnFALSE;
}
foreach($query->result()as$k=>$row){
$this->settings[$row->key]=$row->value;
$arr[$row->key]=$row->value;
}
return$arr;
}
//------------------------------------------------------------------------
/**
*更改设置
*/
publicfunctionedit($key,$value){
$this->_ci->db->where('key',$key);
$this->_ci->db->update($this->settings_db,array('value'=>$value));
if($this->_ci->db->affected_rows()==0){
returnFALSE;
}
returnTRUE;
}
//------------------------------------------------------------------------
/**
*新增设置
*/
publicfunctioninsert($key,$value='',$group='addon',$autoload='no'){
//检查是否已经被添加的设置
$this->_ci->db->select('value')->from($this->settings_db)->where('key',$key);
$query=$this->_ci->db->get();
if($query->num_rows()>0){
return$this->edit($key,$value);
}
$data=array('key'=>$key,'value'=>$value,'group'=>$group,'autoload'=>$autoload,);
$this->_ci->db->insert($this->settings_db,$data);
if($this->_ci->db->affected_rows()==0){
returnFALSE;
}
returnTRUE;
}
//------------------------------------------------------------------------
/**
*删除设置
*/
publicfunctiondelete($key){
$this->_ci->db->delete($this->settings_db,array('key'=>$key));
if($this->_ci->db->affected_rows()==0){
returnFALSE;
}
returnTRUE;
}
//------------------------------------------------------------------------
/**
*删除设置组及成员配置
*/
publicfunctiondelete_group($group){
$this->_ci->db->delete($this->settings_db,array('group'=>$group));
if($this->_ci->db->affected_rows()==0){
returnFALSE;
}
returnTRUE;
}
}
/*EndoffileSetting.php*/
/*Location:./application/libraries/Setting.php*/
最后,打开application/config/config.php,新增
/** *系统配置表名 */ $config['settings_table']="system_settings";
希望本文所述对大家基于Codeigniter框架的PHP程序设计有所帮助。