加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP编程:CI(Codeigniter)的Setting增强配置类实例

发布时间:2020-12-13 04:09:35 所属栏目:PHP教程 来源:网络整理
导读:《CI(Codeigniter)的Setting增强配置类实例》要点: 本文介绍了CI(Codeigniter)的Setting增强配置类实例,希望对您有用。如果有疑问,可以联系我们。 PHP编程 本篇章节讲解Codeigniter的Setting增强配置类.供大家参考研究,具体如下: PHP编程 该增强

《CI(Codeigniter)的Setting增强配置类实例》要点:
本文介绍了CI(Codeigniter)的Setting增强配置类实例,希望对您有用。如果有疑问,可以联系我们。

PHP编程本篇章节讲解Codeigniter的Setting增强配置类.分享给大家供大家参考,具体如下:

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

PHP编程使用:

PHP编程在需要的地方

代码如下:
$this->load->library('setting');

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

PHP编程首先,创建数据表

PHP编程
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;

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

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 */

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

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

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

《CI(Codeigniter)的Setting增强配置类实例》是否对您有启发,欢迎查看更多与《CI(Codeigniter)的Setting增强配置类实例》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读