在我的 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内容。请帮我解决这个问题!
答案 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开始工作了。