当前位置:首页 > CMS教程 > 其它CMS > 列表

CI(Codeigniter)的Setting增强配置类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-03 23:34:20 浏览: 评论:0 

这篇文章主要介绍了Codeigniter的Setting增强配置类,结合实例形式较为详细的分析了Codeigniter增强配置类的具体实现步骤与相关技巧,需要的朋友可以参考下,本文实例讲述了Codeigniter的Setting增强配置类,分享给大家供大家参考,具体如下:

该增强配置类适用配置项要求比较灵活的项目。可实现预加载配置、组配置、单项调取、增、删、改配置,无需在改动config文档。

使用:

在需要的地方:

$this->load->library('setting');

对于预加载项可以使用:

$this->config->item();

进行获取,对于临时调取项可以使用代码如下:

$this->setting->item();

进行获取,首先,创建数据表:

  1. CREATE TABLE `system_settings` ( 
  2.  `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  3.  `keyvarchar(64) NOT NULL DEFAULT ''
  4.  `value` mediumtext NOT NULL
  5.  `groupvarchar(55) NOT NULL DEFAULT 'site'
  6.  `autoload` enum('no','yes'NOT NULL DEFAULT 'yes'
  7.  PRIMARY KEY (`id`,`key`), 
  8.  KEY `name` (`key`), 
  9.  KEY `autoload` (`autoload`) 
  10. ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; 

然后,在application/libraries目录下创建setting.php,内容如下

  1. <?php 
  2. if (!defined('BASEPATH')) 
  3.   exit('No direct script access allowed'); 
  4. class Setting { 
  5.   private $_ci
  6.   private $settings_autoloaded
  7.   private $settings = array(); 
  8.   private $settings_group = array(); 
  9.   private $settings_db
  10.   public function __construct() { 
  11.     $this->_ci = &get_instance(); 
  12.     $this->settings_db = $this->_ci->config->item('settings_table'); 
  13.     $this->autoload(); 
  14.   } 
  15.   // ------------------------------------------------------------------------ 
  16.   // 华丽的分割线 正式开始 
  17.   // ------------------------------------------------------------------------ 
  18.   /** 
  19.    * 从数据库获取所有自动加载的设置 
  20.    */ 
  21.   public function autoload() { 
  22.     //如果存在则直接返回 
  23.     if (!emptyempty($this->settings)) { 
  24.       return $this->settings; 
  25.     } 
  26.     //如果系统不存在数据表则返回false 
  27.     if (!$this->_ci->db->table_exists($this->settings_db)) { 
  28.       return FALSE; 
  29.     } 
  30.     //查询标记为自动加载的项 
  31.     $this->_ci->db->select('key,value')->from($this->settings_db)->where('autoload''yes'); 
  32.     $query = $this->_ci->db->get(); 
  33.     if ($query->num_rows() == 0) { 
  34.       return FALSE; 
  35.     } 
  36.     //循环写入系统配置 
  37.     foreach ($query->result() as $k => $row) { 
  38.       $this->settings[$row->key] = $row->value; 
  39.       $this->_ci->config->set_item($row->key, $row->value); 
  40.     } 
  41.     //标记会话,避免重复读库 
  42.     //$this->_ci->session->set_userdata('settings_autoloaded', TRUE); 
  43.     return $this->settings; 
  44.   } 
  45.   // ------------------------------------------------------------------------ 
  46.   /** 
  47.    * 获取单个设定 
  48.    * 
  49.    * <code> 
  50.    * <?php $this->settings->get('config_item'); 
  51.    ?> 
  52.    * </code> 
  53.    */ 
  54.   public function item($key) { 
  55.     if (!$key) { 
  56.       return FALSE; 
  57.     } 
  58.     //首先检查是否系统已经自动加载 
  59.     if (isset($this->settings[$key])) { 
  60.       return $this->settings[$key]; 
  61.     } 
  62.     //查询数据库 
  63.     $this->_ci->db->select('value')->from($this->settings_db)->where('key'$key); 
  64.     $query = $this->_ci->db->get(); 
  65.     if ($query->num_rows() > 0) { 
  66.       $row = $query->row(); 
  67.       $this->settings[$key] = $row->value; 
  68.       return $row->value; 
  69.     } 
  70.     // 查询不到结果则查找系统config,返回值或者false 
  71.     return $this->_ci->config->item($key); 
  72.   } 
  73.   // ------------------------------------------------------------------------ 
  74.   /** 
  75.    * 获取组配置 
  76.    */ 
  77.   public function group($group = '') { 
  78.     if (!$group) { 
  79.       return FALSE; 
  80.     } 
  81.     $this->_ci->db->select('key,value')->from($this->settings_db)->where('group'$group); 
  82.     $query = $this->_ci->db->get(); 
  83.     if ($query->num_rows() == 0) { 
  84.       return FALSE; 
  85.     } 
  86.     foreach ($query->result() as $k => $row) { 
  87.       $this->settings[$row->key] = $row->value; 
  88.       $arr[$row->key] = $row->value; 
  89.     } 
  90.     return $arr
  91.   } 
  92.   // ------------------------------------------------------------------------ 
  93.   /** 
  94.    * 更改设置 
  95.    */ 
  96.   public function edit($key$value) { 
  97.     $this->_ci->db->where('key'$key); 
  98.     $this->_ci->db->update($this->settings_db, array('value' => $value)); 
  99.     if ($this->_ci->db->affected_rows() == 0) { 
  100.       return FALSE; 
  101.     } 
  102.     return TRUE; 
  103.   } 
  104.   // ------------------------------------------------------------------------ 
  105.   /** 
  106.    * 新增设置 
  107.    */ 
  108.   public function insert($key$value = ''$group = 'addon'$autoload = 'no') { 
  109.     // 检查是否已经被添加的设置 
  110.     $this->_ci->db->select('value')->from($this->settings_db)->where('key'$key); 
  111.     $query = $this->_ci->db->get(); 
  112.     if ($query->num_rows() > 0) { 
  113.       return $this->edit($key$value); 
  114.     } 
  115.     $data = array('key' => $key'value' => $value'group' => $group'autoload' => $autoload, ); 
  116.     $this->_ci->db->insert($this->settings_db, $data); 
  117.     if ($this->_ci->db->affected_rows() == 0) { 
  118.       return FALSE; 
  119.     } 
  120.     return TRUE; 
  121.   } 
  122.   // ------------------------------------------------------------------------ 
  123.   /** 
  124.    * 删除设置 
  125.    */ 
  126.   public function delete($key) { 
  127.     $this->_ci->db->delete($this->settings_db, array('key' => $key)); 
  128.     if ($this->_ci->db->affected_rows() == 0) { 
  129.       return FALSE; 
  130.     } 
  131.     return TRUE; 
  132.   } 
  133.   // ------------------------------------------------------------------------ 
  134.   /** 
  135.    * 删除设置组及成员配置 
  136.    */ 
  137.   public function delete_group($group) { 
  138.     $this->_ci->db->delete($this->settings_db, array('group' => $group)); 
  139.     if ($this->_ci->db->affected_rows() == 0) { 
  140.       return FALSE; 
  141.     } 
  142.     return TRUE; 
  143.   } 
  144. /* End of file Setting.php */ 
  145. /* Location: ./application/libraries/Setting.php */ 

最后,打开application/config/config.php,新增:

  1. /** 
  2.  * 系统配置表名 
  3.  */ 
  4. $config['settings_table'] = "system_settings";

Tags: Codeigniter Setting配置类

分享到: