2011-05-12 88 views
6

我仍在试图找出一种方法来获取移动网站的运行。我在CodeIgniter中有一个Web应用程序,我想创建它的移动版本。然而,我不想重写我的代码太多,尤其是不是我的模型。(因为他们返回我可以在任何地方使用的原始数据。)在不同的应用程序之间共享CI模型

我想运行我的手机网站在一个子域(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),以及不同应用程序之间的一些自定义库/助手。

我希望这是明确的,如果不是,我会很乐意解释更多我在找什么。非常感谢!

+0

为您的移动版本添加另一种视图,而不是创建一个全新的应用程序。我从来没有使用CI,但是这是作为http://www.agavi.org包的一部分。这完全是MVC体系结构的重点。 – Treffynnon 2011-05-12 13:09:26

+0

更新我的问题,为什么我不认为这是可能的。谢谢! – cabaret 2011-05-12 13:12:06

+0

哦,我看到你的问题。你需要使你的配置文件对你的应用程序工作的位置敏感。 – Treffynnon 2011-05-12 13:20:59

回答

2

在配置中。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 /服务器环境变量的URL,所以如果您通过子域名访问的网站,然后它会如果通过根域名访问它使用的子域网址或它将使用根域。

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

+0

这实际上是最新的CI版本如果没有设置(最终)猜测基础URL。 (虽然略有不同) – 2011-05-12 16:16:06

2

我认为解决这个问题的正确方法就是在现有的网络应用程序中创建一组新的控制器和视图(针对移动设备)。然后,为新的“移动”控制器定义路线(也许你还应该为每条路线添加一个“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. 做一个小的.htaccess破解了网址在这个论坛页面http://www.webmasterworld.com/apache/3509887.htm重写描述,让所有的请求m.yoursite.tld/...会去yoursite.tld/M/...

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

希望这会有所帮助。

+0

你不应该需要一组全新的控制器,只需要新的视图。控制器会添加一个额外的方法,以便移动设备指向正确的视图。我不知道CI是否真的是MVC。 – Treffynnon 2011-05-12 13:14:53

+0

我同意你的意见。我建议创建控制器,以防在移动视图中某些数据不需要,因此创建优化的控制器会减少模型的负载。 – 2011-05-12 13:19:01

+0

更新了我的问题。谢谢回复。 – cabaret 2011-05-12 13:20:38

3

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

包让你与分享librairies,型号等:

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

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

希望它能帮助。

+0

谢谢。我会确保检查出来,没有听说过它是诚实的。听起来可能是我需要的。 – cabaret 2011-05-12 17:19:47

相关问题