我如何加载不同的视图?

时间:2016-03-25 15:07:32

标签: php codeigniter mobile

在我的 MY_Controller.php 中,我想检测用户设备和请求的域名。我在同一个应用中使用的域名是: www.seeme.tld m.seeme.tld ,我也在使用$this->detect()。 所以这就是我所做的:

<?php

if($this->detect->isMobile() || $_SERVER['HTTP_HOST'] === MOBILE_URL){
$this->config->set_item('base_url', MOBILE_URL);
}elseif(!$this->detect->isMobile() || $_SERVER['HTTP_HOST'] != MOBILE_URL){
$this->config->set_item('base_url', WEBSITE_URL);
}

?>

我在application / views文件夹中有2个文件夹:PC(适用于PC用户)和Mobile(适用于移动用户) 为了加载视图,我在fetch()函数中使用了这段代码:

public function fetch($view, $data = array, $other_vars = false)
{

if(base_url() === MOBILE_URL || $this->_ci->detect->isMobile()){
$f = 'Mobile/';
}elseif(!$this->_ci->detect->isMobile() || base_url() != MOBILE_URL){
$f = 'PC/';
}
return $this->_ci->load->view($f.'contents/'.$view, $data, true);
}

当我使用移动设备或使用移动设备访问 m.seeme.tld 时,我会获得移动内容。但是当我访问 m.seeme.tld 并使用PC而不是获取移动内容时,我宁愿获得PC内容。请帮我解决这个问题!

2 个答案:

答案 0 :(得分:1)

有时更改配置数组可能会出现问题:How to override config's array within a controller in CodeIgniter?。你也在进行双重检查(在控制器和功能中)。

我通过这种方式达成了类似的行为:

YOURCONTROLLER.PHP __construct():

if ($this->detect->isMobile() || $_SERVER['HTTP_HOST'] === MOBILE_URL){
   define('IS_MOBILE', TRUE);
}else{
   define('IS_MOBILE', FALSE);
}

然后你可以用来加载视图:

if (IS_MOBILE) {
   $view_folder = 'Mobile/';
}else{
   $view_folder = 'PC/';
}
$this->load->view($view_folder.$view, $data, TRUE); 

您还可以添加一个检查点来查看if语句是否正常工作:

if ($this->detect->isMobile() || $_SERVER['HTTP_HOST'] === MOBILE_URL){
   define('IS_MOBILE', TRUE);
   log_message('debug', 'Im mobile browser: '.$this->detect->isMobile().' or the url is mobile:'.$_SERVER["HTTP_HOST"]);
}else{
   define('IS_MOBILE', FALSE);
   log_message('debug', 'Im pc');
}

希望对你有所帮助。 //这只能取代&#39; ===&#39;与&#39; =&#39;。

答案 1 :(得分:0)

感谢您的帮助,但我已经修好了。我所做的只是首先检测MY_Controller.php中的移动用户并将它们重定向到MOBILE_URL然后在我的fetch()中我做了:

if($_SERVER['HTTP_HOST'] = MOBILE_URL){
$view_folder = 'Mobile/; 
}else{ $view_folder = 'Frontend/; 
}

就是这样,Paam开始工作了。