|
本帖最后由 huboo82 于 2011-12-24 14:53 编辑
从ST_blog获得的灵感。扩展Controller,在Controller的_construct方法中调用下面的方法
PHP复制代码 class MY_Controller extends CI_Controller {
protected $theme = 'default';
protected $_data = array();
public function __construct ()
{
parent ::__construct ();
// UA 检测及视图位置设置
$this->set_view_path();
}
private function set_view_path ()
{
$this->load->library('user_agent');
$get_flavour = $this->input->get('flavour', TRUE);
if($get_flavour && $get_flavour == 'mobile')
$this->input->set_cookie('flavour', 'mobile', 365 * 24 * 60 * 60);
if($get_flavour && $get_flavour != 'mobile')
$this->input->set_cookie('flavour', 'mobile');
$flavour = $get_flavour ? $get_flavour : $this->input->cookie('flavour', TRUE);
// 初始化主题视图路径
$this->theme = $this->config->item('site_theme') ? $this->config->item('site_theme') : $this->config->set_item('site_theme', $this->theme);
// 如果检测到为移动设备或为手动设置为移动设备
if($this->agent->is_mobile() OR ($flavour && $flavour == 'mobile'))
$theme_path = THEME_PATH . $this->theme . DIRECTORY_SEPARATOR . 'mobile' . DIRECTORY_SEPARATOR;
else
$theme_path = THEME_PATH . $this->theme . DIRECTORY_SEPARATOR;
$this->load->set_view_path($theme_path);
}
}
复制代码
上面用get获得flavour的方式来自于django-mobile,可以看这个站点的效果(www.web916.com)。如果flavour为mobile就切换到mobile用到的视图,这样可以在chrome里调试,或者ua检测到is_mobile也用$this->load->set_view_path($theme_path);来设置视图位置。
这个又要扩展一下Loader了,代码来源:http://pastebin.com/w258KkVu。
PHP复制代码
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Loader extends CI_Loader {
protected $_ci_view_paths = array();
public function __construct ()
{
parent ::__construct ();
}
public function set_view_path ($path)
{
$this->_ci_view_paths = array($path => TRUE);
}
}
/* End of file: MY_Loader.php */
/* Location: ./application/core/MY_Loader.php */
复制代码
以上扩展代码,我个人仅在2.10版CI上测试过,因为Loader中在CI2.0的时候还没有_ci_view_paths这个,只有_ci_view_path,一个s的不同。
记得扩展的Controller和Loader要放到application/core目录里。
多谢看完。{:soso_e142:}
weblog 链接地址:根据浏览器UA动态切换视图(主题换换换?)
|
|