使用 CodeIgniter 的移动版网站

Posted

技术标签:

【中文标题】使用 CodeIgniter 的移动版网站【英文标题】:Mobile version of site using CodeIgniter 【发布时间】:2012-12-05 09:44:21 【问题描述】:

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

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

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

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

【问题讨论】:

检查控制器中的移动检测并重定向它。在我看来非常直接。你有什么问题? 如果控制器、模型或视图没有变化,为什么还需要移动站点? 暂时让 Google 索引移动域。稍后我将它们分开。 itachi,我应该检查每个控制器的移动控制吗?一般有什么简单的解决方案,比如路线……等等? @OnurGöker 如果您想在每个控制器中执行此操作,只需扩展基本 CI 控制器即可。 【参考方案1】:

用户agent class有功能;

$this->agent->is_mobile();

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

【讨论】:

【参考方案2】:

您无需到处重写代码,只需加载不同的视图文件夹即可。本质上,您可以让 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));
    
  

?>

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

希望这会有所帮助。这就是我要做的事情:)!

【讨论】:

+1:在我看来,这个解决方案是完美而简单的。只更改视图,保持所有其他内容不变。 我使用了一个非常相似的解决方案。唯一的不同是因为我不需要将每个视图都更改为移动视图,我会先检查 file_exists,如果没有则回退到桌面版本【参考方案3】:

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

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

http://24ways.org/2012/responsive-responsive-design/
http://24ways.org/2012/responsive-images-what-we-thought-we-needed/

【讨论】:

+1:这不是问题的好答案,但这是正确要做的事情。【参考方案4】:

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

【讨论】:

你能分享我这个解决方案吗,我只更改了桌面和移动站点的视图、控制器和模型。 @ChirayuVyas,最好在 CodeIgniter 中检查钩子:codeigniter.com/user_guide/general/hooks.html

以上是关于使用 CodeIgniter 的移动版网站的主要内容,如果未能解决你的问题,请参考以下文章

移动到新主机后找不到内部页面 (404) - CodeIgniter

1615 准备好的语句需要在codeigniter中重新准备

验发票网站成功推出验发票移动web版

使用 jQuery Mobile 的 Codeigniter 有时会返回错误的 base_url()

根据 url 更改 CodeIgniter 控制器目录

Angelleye 的 Codeigniter,Paypal api - 向单个接收者发送付款