2012-12-18 111 views
3

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

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

不会有任何变化,控制器,无论是在视图和模型。两者都是一样的。

我不想更改我的.htaccess文件。任何可能的解决方案?

+1

检查控制器中的移动检测并重定向它。在我看来很直接。你有什么问题? – itachi

+0

如果控制器,型号或视图没有变化,您为什么需要移动网站? – Rooneyl

+0

现在让Google为移动领域编制索引。我以后会把它们分开。 –

回答

0

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

3

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

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

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

+1:这个问题不是一个很好的答案,但是这是正确的做法。 –

7

用户agent class具有的功能;

$this->agent->is_mobile(); 

你可以在你的基本控制器的结构中使用它来测试移动。

5

而不是重写你的代码遍布整个地方,你可以加载一个不同的视图文件夹。实质上,如果每次使用$ this-> load-> view(“xxx”),只需让CodeIgniter从另一个文件夹加载具有相同名称的不同视图即可。首先,在您的视图文件夹中创建一个名为/ 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)); 
    } 
} 

?> 

自适应网页设计在我看来是一个烂摊子,但仍分开的代码对你非常漂亮,同时仍然能够使用你的控制器和模型一致。

希望这会有所帮助。这就是我将要这样做的方式:)!

+0

+1:在我看来,这个解决方案非常完美和简单。只改变观点,保留所有其他内容。 – butters

+0

我用了一个非常类似的解决方案。唯一不同的是,因为我不需要将每个视图都更改为移动设备,所以我会首先执行file_exists检查,如果没有,则返回到桌面版本 –