提问人:Onur 提问时间:12/18/2012 更新时间:12/4/2013 访问量:8849
使用 CodeIgniter 的网站移动版本
Mobile version of site using CodeIgniter
问:
我想做的是在 CodeIgniter 中创建一个我的网站的移动版本。
我想将我的完整网站重定向到 m.example.com
控制器不会发生变化,视图和模型也不会发生变化。两者都是一样的。
我不想更改我的 .htaccess 文件。有什么可能的解决方案吗?
答:
3赞
Peter Steenbergen
12/18/2012
#1
为什么要重定向?如果一切都一样,为什么不看看响应式网页设计呢?
24ways.org 有一些很好的文章:
http://24ways.org/2012/responsive-responsive-design/
http://24ways.org/2012/responsive-images-what-we-thought-we-needed/
评论
0赞
Jezen Thomas
12/18/2012
+1:这不是这个问题的好答案,但这是正确的做法。
9赞
Rooneyl
12/18/2012
#2
用户代理类有一个功能;
$this->agent->is_mobile();
您可以在基本控制器的构造中使用它来测试是否移动。
0赞
Onur
12/19/2012
#3
好的,我找到了另一种解决方案。我使用了钩子预控制器,并将 www 子域重定向到 m 子域。
评论
0赞
Chirayu Vyas
2/25/2020
你能分享我这个解决方案吗,我只更改了桌面和移动网站的视图和控制器和模型。
0赞
Onur
2/29/2020
@ChirayuVyas,最好检查一下 CodeIgniter 中的钩子: codeigniter.com/user_guide/general/hooks.html
6赞
Dom
7/27/2013
#4
无需到处重写代码,只需加载不同的视图文件夹即可。从本质上讲,每次你使用 $this->load->view(“xxx”) 时,你都可以让 CodeIgniter 从另一个文件夹中加载一个同名的不同视图。首先,在视图文件夹中创建一个名为 /mobile 的新文件夹,并创建具有相同确切命名约定的视图,它将通过扩展 Loader.php 类相应地加载视图。
无论你是在做一个响应式设计,还是要创建一个iPhone应用程序,看起来像你的网站的移动版本,有点像Facebook所做的,那么你都可以覆盖核心文件夹中的Loader类。在 application/core 文件夹中,创建一个MY_Loader.php并将其放入该文件中。
我的看起来像下面
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Loader extends CI_Loader
{
//overides existing view function
function view($view, $vars = array(), $return = FALSE)
{
$CI =& get_instance();
$CI->load->library("user_agent");
if($CI->agent->is_mobile()){
$view = 'mobile/'.$view;
}
return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
}
}
?>
在我看来,响应式网页设计是一团糟,但这仍然很好地为您分离了代码,同时仍然能够一致使用您的控制器和模型。
希望这会有所帮助。这就是我:)要做的事情!
评论
0赞
butters
9/28/2013
+1:在我看来,这个解决方案是完美而简单的。只改变视图,保持所有其他东西不变。
0赞
Richard Merchant
1/6/2014
我使用了与此非常相似的解决方案。唯一的区别是因为我不需要将每个视图都更改为移动设备,我会先进行file_exists检查,如果没有,我会回退到桌面版本
评论