使用 CodeIgniter 的网站移动版本

Mobile version of site using CodeIgniter

提问人:Onur 提问时间:12/18/2012 更新时间:12/4/2013 访问量:8849

问:

我想做的是在 CodeIgniter 中创建一个我的网站的移动版本。

我想将我的完整网站重定向到 m.example.com

控制器不会发生变化,视图和模型也不会发生变化。两者都是一样的。

我不想更改我的 .htaccess 文件。有什么可能的解决方案吗?

php codeigniter 重定向 移动 路由

评论

1赞 itachi 12/18/2012
检查控制器中的移动检测并将其重定向。在我看来,这很简单。您遇到了什么问题?
0赞 Rooneyl 12/18/2012
如果控制器、型号或视图没有变化,为什么还需要移动网站?
0赞 Onur 12/18/2012
暂时让 Google 将移动域名编入索引。我稍后会把它们分开。
0赞 Onur 12/18/2012
itachi,我应该检查每个控制器中的移动控制吗?一般来说,任何简单的解决方案,如路线......等?
0赞 Rooneyl 12/18/2012
@OnurGöker,如果要在每个控制器中执行此操作,只需扩展基本 CI 控制器即可。

答:

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检查,如果没有,我会回退到桌面版本