6

我仍在试图找出一种让移动网站运行的方法。我在 CodeIgniter 中有一个网络应用程序,我想创建它的移动版本。但是,我不想重写太多我的代码,尤其是我的模型。(因为它们返回我可以在任何地方使用的原始数据。)

我想在子域 ( m.mydomain.tld) 上运行我的移动网站。桌面版运行在www.mydomain.tld. 我尝试将子域指向我的 CI 应用程序文件夹;当移动浏览器到达时www.mydomain.tld,我将其重定向到m.mydomain.tld. 正如我所说,这个子域指向我的 CI 应用程序文件夹;然后,我为移动优化的控制器和视图提供服务。

然而!如 中app/config/config.php所述,我的应用程序的 base_url 是:

$config['base_url'] = 'http://www.mydomain.tld/';

所以重定向到m.mydomain.tld并没有真正起作用,因为我仍然被重定向到www并且我不想要那个,即使它然后做了我想要它做的事情。

我试图解决这个问题的方法是使用不同的控制器/视图创建两个应用程序文件夹,但共享模型等。所以,我试图找出一种方法来重组我的 CodeIgniter 应用程序,以便我可以共享我的模型和“自定义”控制器'(MY_Controller),以及不同应用程序之间的一些自定义库/助手。

我希望这很清楚,如果不是,我很乐意解释更多我在寻找什么。非常感谢!

4

3 回答 3

3

也许你应该看看 codeIgniter 的 2.0 新特性:package.

包允许您与以下人员共享库、模型等:

$this->load->add_package_path('/usr/local/codeigniter/shared');

阅读: http: //philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

希望能帮助到你。

于 2011-05-12T17:16:28.533 回答
2

我认为解决这个问题的正确方法是在您现有的 Web 应用程序中创建一组新的控制器和视图(针对移动设备)。然后只需为新的“移动”控制器定义路由(也许您还应该为每个路由添加“m/”或“mobile/”前缀),仅此而已。

更新:

好的我明白了。我建议你这样做:

  1. 首先在 config.php 中创建这条记录:

    $config["mobile_base_url"] = "http://m.yoursite.tld/";
    
  2. 然后创建你的 url_helper,添加一个 mobile_site_url() 函数,它类似于 CI site_url() 函数(视图和控制器中的链接需要这个)。

  3. 创建移动视图和控制器,使用“m/”前缀为它们定义路由。

  4. 对本论坛页面http://www.webmasterworld.com/apache/3509887.htm中描述的 url 重写做一些 .htaccess hack ,这样所有对 m.yoursite.tld/... 的请求都会转到 yoursite.tld /米/...

我猜你会遇到这种方法的一些问题,但你绝对不应该为你的问题创建单独的 CI 应用程序。

希望这可以帮助。

于 2011-05-12T13:11:19.290 回答
2

在 config.php 中替换$config['base_url'] = 'http://www.mydomain.tld/';为:

if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) {
    $config['base_url'] = 'https://';
} else {
    $config['base_url'] = 'http://';
}
$config['base_url'] .= $_SERVER['SERVER_NAME'] . '/';

这将从 Apache/server 环境变量中获取 URL,因此如果您通过子域访问该站点,那么它将使用子域 URL,或者如果您通过根域访问它,它将使用根域。

我不是 CI 专家,所以可能还有其他方法,但这是我所知道的最简单的解决方案。

于 2011-05-12T13:23:34.553 回答