【问题标题】:How do i load different views?如何加载不同的视图?
【发布时间】:2016-03-25 15:07:31
【问题描述】:

在我的 MY_Controller.php 中,我想检测用户设备和请求的域名。我在同一个应用上使用的域名是:www.seeme.tldm.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 时,我会获得移动内容。但是当我用 PC 访问 m.seeme.tld 而不是获取移动内容时,我宁愿获取 PC 内容。请帮我解决这个问题!

【问题讨论】:

  • 为什么不在fetch 函数中将elseif 更改为简单的else
  • @Vickel 没有寻找移动检测脚本。我已经在使用 mobiledetect.net
  • @Keeleon 仍在显示电脑内容。

标签: php codeigniter mobile


【解决方案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');
}

希望对您有所帮助。 // 这只适用于将 '===' 替换为 '='。

【讨论】:

  • 感谢您的帮助,但您的代码仍然无法正常工作,因为当我使用 PC 访问移动网址时,它会打印“Im pc”。
  • 好的,现在您可以知道这两个条件中的哪一个不适用: log_message('debug', 'Im pc - Ismobile 应该为 false: '.$this->detect->isMobile( ).' 和 url mobile true:'.($_SERVER['HTTP_HOST'] === MOBILE_URL); 并检查哪个不正确。你如何设置 MOBILE_URL?在哪里定义?你有 .htaccess 会影响 URL ?
  • 如果打印 $_SERVER['HTTP_HOST'] 的结果是否正确?
  • MOBILE_URL 在 /application/config/constants.php 中定义
  • 唯一的可能是 SERVER === MOBILE_URL 的比较应该为真时为假(PC 和 URL 到 m.seeme.tld)。附加您的 constants.php 的代码。如何将 2 个不同的 URL 重定向到同一个 CI 应用程序?也发布您的 .htaccess(ou 路线)。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多