4

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

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

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

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

4

4 回答 4

9

用户代理类有一个功能;

$this->agent->is_mobile();

您可以在基本控制器的构造中使用它来测试是否移动。

于 2012-12-18T08:08:34.663 回答
6

无需到处重写代码,您只需加载不同的视图文件夹即可。本质上,您可以让 CodeIgniter 在每次使用 $this->load->view("xxx") 时从另一个文件夹加载具有相同名称的不同视图。首先,在您的视图文件夹中创建一个名为 /mobile 的新文件夹,并使用完全相同的命名约定创建视图,它将通过扩展 Loader.php 类相应地加载视图。

无论您是在进行响应式设计,还是要创建一个看起来像移动版网站的 iPhone 应用程序,就像 facebook 所做的那样,那么您只需覆盖核心文件夹中的 Loader 类即可。在您的应用程序/核心文件夹中创建一个 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));
    }
}  

?>

在我看来,响应式网页设计是一团糟,但这仍然可以很好地为您分离代码,同时仍然能够一致地使用您的控制器和模型。

希望这可以帮助。这就是我要做的事情:)!

于 2013-07-27T00:47:55.030 回答
3

为什么要重定向?如果一切都一样,为什么不研究响应式网页设计?

24ways.org 有一些很好的文章:

http://24ways.org/2012/responsive-responsive-design/
http://24ways.org/2012/responsive-images-what-we-thought-we-needed/
于 2012-12-18T08:06:25.090 回答
0

好的,我找到了另一个解决方案。我使用了钩子预控制器,并将 www 子域重定向到 m 子域。

于 2012-12-19T08:03:59.367 回答