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&amp;&amp;mysql)四
Oct 09 PHP
php在线打包程序源码
Jul 27 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
php 缩略图实现函数代码
Jun 23 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
分享一则PHP定义函数代码
Feb 26 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 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
php微信开发之带参数二维码的使用
2016/08/03 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
用vue写一个日历
2020/11/02 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
Numpy之文件存取的示例代码
2018/08/03 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
浅析python内置模块collections
2019/11/15 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
python 实现图片批量压缩的示例
2020/12/18 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
个人工作总结范文2014
2014/11/07 职场文书
会计求职自荐信范文
2015/03/04 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android