|
CI版本:2.1.0
一.整体思路:
通过application/core/MY_Controller实现核心功能。
1.网站设置:添加两个核心类:System、Web,储存网站系统设置和页面整体设置。
2.主题功能:许多CMS的模板功能都是外挂[size=-1]smarty实现或者通过正则表达式替换文本,就如CI刚开始"<?=",在此为了保证php速度并没有使用这些,而且取消了Output内的正则替换(protected $parse_exec_vars = FALSE;)。主要是通过Loader类修改view路径实现Theme主题功能;并将view需要用的变量存在$SYS, $WEB内,在include view前 global $SYS, $WEB(其实也可以通过CI本来extract的方法,这里不知道选哪个比较好)等变量,实现view内直接访问,不用再传变量到view里。
3.语言功能:修改Lang核心类 读取 默认语言 部分,实现多语言切换功能,这里还将原来读取application/language修改为优先读取根目录下language文件夹。
4.模块功能:这个功能还没想好,因为还是新手,个人不太喜欢分开“每个module,module内都含有相应配置、控制器、model、view”这种实现方式,感觉很复杂。其实看了Loader类里其实有几个package方法:add_package_path、get_package_paths、remove_package_path等,这些方法为CI添加新的config、model、view路径,感觉可以用来处理模块功能。
二.MY_Controller文件流程:
1.载入设置类
PHP复制代码 $SYS =& load_class('system', 'core');
$WEB =& load_class('web', 'core'); 复制代码
2.定义类,并在构造函数内载入数据库
PHP复制代码 $this->load->database();
if ( ! $this->db->db_select())
{
show_error('Unable to connect databse!');
} 复制代码
3.在构造函数内载入设置类
PHP复制代码 $this->load->model('base/settings_model'); 复制代码
通过设置类查询数据库初始化 System 类和 Web 类
4.在构造函数内添加相应主题view path,以便Loader先读取主题内的view文件
PHP复制代码 $this->load->add_view_path(THEMEPATH.$this->system->site_default_tem.'/'); 复制代码
三.Loader类修改部分:
1.修改view 路径方法
PHP复制代码 public function add_view_path ($view_path = '')
{
if($view_path == '')
return false;
$this->_ci_view_paths = array($view_path.'views/' => true) + $this->_ci_view_paths ;
return true;
} 复制代码
2.global变量,以便view内能<? echo $SYS->site_default_tem; ?>访问变量,尽量将程序部分和视图部分分开。
PHP复制代码 extract($this->_ci_cached_vars );
global $SYS, $WEB 复制代码
四.Lang类
1.修改读取默认语言
PHP复制代码 $config =& get_config ();
if ($idiom == '')
{
$deft_lang = ( ! isset($config['language'])) ? 'english' : $config['language'];
$idiom = ($deft_lang == '') ? 'english' : $deft_lang;
} 复制代码
修改为
PHP复制代码 $system =& load_class ('system', 'core');
if ($idiom == '')
{
$deft_lang = ( ! isset($system->site_default_lang)) ? 'english' : $system->site_default_lang;
$idiom = ($deft_lang == '') ? 'english' : $deft_lang;
} 复制代码
2.语言文件优先读取
PHP复制代码 $found = FALSE;
//change lang path
if (file_exists(LANGPATH .$idiom.'/'.$langfile))
{
include(LANGPATH .$idiom.'/'.$langfile);
$found = TRUE;
} 复制代码
以上的LANGPATH、THEMEPATH为index.php内定义的类似APPPATH的常量。
其实也不多,该想法参考了部分CMS和ionize的做法。其实也就是工作的一部分拿出来分享和交流,还望大家能帮忙提些改善的意见!{:soso_e113:}
|
|