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


Posted in PHP onJanuary 06, 2016

本文实例讲述了Codeigniter的Setting增强配置类。分享给大家供大家参考,具体如下:

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

使用:

在需要的地方

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

对于预加载项可以使用
$this->config->item();
进行获取
对于临时调取项可以使用
$this->setting->item();
进行获取

首先,创建数据表

CREATE TABLE `system_settings` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `key` varchar(64) NOT NULL DEFAULT '',
 `value` mediumtext NOT NULL,
 `group` varchar(55) NOT NULL DEFAULT 'site',
 `autoload` enum('no','yes') NOT NULL DEFAULT 'yes',
 PRIMARY KEY (`id`,`key`),
 KEY `name` (`key`),
 KEY `autoload` (`autoload`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

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

<?php
if (!defined('BASEPATH'))
  exit('No direct script access allowed');
class Setting {
  private $_ci;
  private $settings_autoloaded;
  private $settings = array();
  private $settings_group = array();
  private $settings_db;
  public function __construct() {
    $this->_ci = &get_instance();
    $this->settings_db = $this->_ci->config->item('settings_table');
    $this->autoload();
  }
  // ------------------------------------------------------------------------
  // 华丽的分割线 正式开始
  // ------------------------------------------------------------------------
  /**
   * 从数据库获取所有自动加载的设置
   */
  public function autoload() {
    //如果存在则直接返回
    if (!empty($this->settings)) {
      return $this->settings;
    }
    //如果系统不存在数据表则返回false
    if (!$this->_ci->db->table_exists($this->settings_db)) {
      return FALSE;
    }
    //查询标记为自动加载的项
    $this->_ci->db->select('key,value')->from($this->settings_db)->where('autoload', 'yes');
    $query = $this->_ci->db->get();
    if ($query->num_rows() == 0) {
      return FALSE;
    }
    //循环写入系统配置
    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>
   */
  public function item($key) {
    if (!$key) {
      return FALSE;
    }
    //首先检查是否系统已经自动加载
    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);
  }
  // ------------------------------------------------------------------------
  /**
   * 获取组配置
   */
  public function group($group = '') {
    if (!$group) {
      return FALSE;
    }
    $this->_ci->db->select('key,value')->from($this->settings_db)->where('group', $group);
    $query = $this->_ci->db->get();
    if ($query->num_rows() == 0) {
      return FALSE;
    }
    foreach ($query->result() as $k => $row) {
      $this->settings[$row->key] = $row->value;
      $arr[$row->key] = $row->value;
    }
    return $arr;
  }
  // ------------------------------------------------------------------------
  /**
   * 更改设置
   */
  public function edit($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) {
      return FALSE;
    }
    return TRUE;
  }
  // ------------------------------------------------------------------------
  /**
   * 新增设置
   */
  public function insert($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) {
      return FALSE;
    }
    return TRUE;
  }
  // ------------------------------------------------------------------------
  /**
   * 删除设置
   */
  public function delete($key) {
    $this->_ci->db->delete($this->settings_db, array('key' => $key));
    if ($this->_ci->db->affected_rows() == 0) {
      return FALSE;
    }
    return TRUE;
  }
  // ------------------------------------------------------------------------
  /**
   * 删除设置组及成员配置
   */
  public function delete_group($group) {
    $this->_ci->db->delete($this->settings_db, array('group' => $group));
    if ($this->_ci->db->affected_rows() == 0) {
      return FALSE;
    }
    return TRUE;
  }
}
/* End of file Setting.php */
/* Location: ./application/libraries/Setting.php */

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

/**
 * 系统配置表名
 */
$config['settings_table'] = "system_settings";

希望本文所述对大家基于Codeigniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
Yii框架数据模型的验证规则rules()被执行的方法
Dec 02 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 #PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
Jan 05 #PHP
Yii中表单用法实例详解
Jan 05 #PHP
php实现购物车功能(下)
Jan 05 #PHP
Yii中创建自己的Widget实例
Jan 05 #PHP
php实现购物车功能(上)
Jul 23 #PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 #PHP
You might like
用 PHP5 轻松解析 XML
2006/12/04 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
python实现聚类算法原理
2018/02/12 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
Python箱型图处理离群点的例子
2019/12/09 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
大学生求职计划书
2014/04/30 职场文书
班级旅游计划书
2014/05/03 职场文书
模范班主任事迹材料
2014/12/17 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle