1

我是 CodeIgniter 的新手,我必须制作一个位于子域上的移动网站。根据您是否是移动设备,唯一要加载的不同内容是controllers目录,应用程序文件夹的所有其余部分都适用于两个版本。如何告诉 CodeIgnitercontrollers根据某些参数对特定目录收费?

或者,这不是使用 CodeIgniter 基于子域管理移动网站的最佳方式吗?我想访问相同的自定义库和模型。

谢谢指导,我迷路了!:)

4

2 回答 2

1

我建议不要创建多个控制器目录。对于您网站的大部分内容,控制器逻辑很可能是相同的。您可以在控制器中创建单独的函数,以应对移动版本和桌面版本不同的情况。

首先,我建议让所有控制器都继承自自定义控制器。请参阅 Phil Sturgeon 关于保持干燥的帖子。实现此功能后,您可以在此自定义“母”控制器中检查请求是来自移动设备还是桌面设备,并且所有后代控制器都会知道它。使用CodeIgniter 的 native $this->agent->is_mobile()

class MY_Controller extends CI_Controller{
    function __construct(){
        parent::__construct();
        $this->data['agent'] = ($this->agent->is_mobile())? 'mobile' : 'desktop';
        $this->load->vars($this->data);
    }
}

改变的是您的演示文稿,而不是您的控制器。现在您知道了请求的来源(代理),您可以渲染适当的内容:

在您的目录中创建两个views目录。

views
    desktop
    mobile

在调用您的意见时:

$this->load->view($this->data['agent'] . "/theview");

关于您在评论中提到的 ajax 请求——您可以检查那些使用CodeIgniter 的本机 $this->input->is_ajax_request()函数的请求。当用户单击您网站上的链接或按钮并触发控制器时,无论是在移动设备还是桌面设备上,他们通常会共享类似的功能(例如数据库写入)......但您可以使用该is_ajax_request()功能来区分并提供适合的响应该平台。

建议查看对视图结构的另一个 StackOverflow 问题的回答以获取更多信息。

希望这可以帮助。

于 2012-08-07T00:51:21.760 回答
0

你会想看看路由来做你想做的事情。我不确定您为什么需要不同的控制器,因为我假设您显示的数据对于每个页面(移动设备与非移动设备)都是相同的 - 只是布局会更改以更好地适应移动平台。如果是这种情况,您需要做的就是在根据用户代理收集/处理控制器中的所有数据之后加载不同的视图(分别为移动/桌面视图) - 您甚至不需要不同的视图子域更不用说另一组控制器了。就是 MVC 的力量。

于 2012-08-06T20:18:48.107 回答