【发布时间】:2013-02-03 10:42:28
【问题描述】:
class Index extends CI_Controller {
private $data = array();
private $content_data = array();
public function __construct() {
parent::__construct();
if (isset($_GET['m2w'])) {
$stw = switch_to_web();
}
if (isset($_GET['w2m'])) {
$stm = switch_to_mobile();
}
// load mobile or desktop view
}
// Called within an helper function
function switch_to_web() {
return set_cookie('load-web', 'true', '86500');
}
function switch_to_mobile() {
return delete_cookie('load-web');
}
function is_mobile() {
// return true;
$CI = & get_instance();
if ($CI->input->cookie('load-web'))
return false;
$CI->load->library('user_agent');
if ($CI->agent->is_mobile()) {
return true;
}else
return false;
}
我有上面的代码块来确定是加载移动视图还是网页视图。
预期的执行顺序:
- 如果设置了 m2w,则设置 load-web cookie(这是在调用 is_mobile 函数之前完成的
- is_mobile 函数看到 load-web cookie 已设置并加载桌面版本
实际执行顺序:
- 如果设置了 m2w,则会调用 load-web cookie 进行设置,但是 is_mobile 函数不会将其视为已设置,因此不会加载桌面版本
- 在 is_mobile 函数返回 true 后设置 cookie,我检查浏览器 cookie 并观察到 cookie 已实际设置但未按预期设置
我做错了什么?
【问题讨论】:
-
您正在展示课程,但我们也需要查看过程。
-
只是一个想法,但您可以尝试响应式设计,而不必为此烦恼。此外,如今,当每个浏览器都试图几乎相同并且基本上无法区分时,通过用户代理进行检测是毫无意义的。
-
@mamdouh 请求被定向到 index.php 文件,该文件加载必要的代码点火器库并加载相应的控制器,我使用的是 codeigniter 框架,在这种情况下,构造函数几乎是入口点除非我没有理解你所说的过程。
-
不不不不 - 这不是必需的 "$CI = & get_instance();"当您扩展 CI 的控制器时。您只需使用 $this->
-
@david,我已编辑问题以表明这些功能是在帮助程序中实现的
标签: php codeigniter