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

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

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

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

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

【问题讨论】:

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

标签: php codeigniter redirect mobile routes


【解决方案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 子域。

    【讨论】:

    猜你喜欢
    • 2020-03-21
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多