我的网站“site.xyz.com”是iframed到客户的主网站“abc.com”。客户希望拥有在iframe中加载的我的网站的移动版本,并且他们想要决定哪个用户需要查看我们网站的移动版本,因此他们请求了像site.xyz.com/mobile这样的链接。加载移动网站。
我的网站已经在CodeIgniter中构建,服务器上不允许.htaccess。移动网站有类似的HTML,但大小和图像将略有不同。所以我打算使用相同的MVC结构,但为移动网站使用不同的样式表。我不要检查它是否是移动网站。任何访问site.xyz.com/mobile应显示移动版本。
我尝试$route['mobile/(:any)'] = '$2';
但是在我的代码中,我使用base_url()
,它反映了site.xyz.com/products而不是site.xyz.com/mobile/products。确定观看者是否看到该站点的桌面/移动版本也很重要。
我不打算依赖会话/ cookie并根据这些变量设置样式表。未来的访问可能是一个问题。
看起来非常简单,但没有得到正确的想法...任何提示我如何使这项工作?
答案 0 :(得分:1)
您可以制作自己的base_url()
- 功能,通过查看uri_string()
返回的内容,查看用于查看该网页的网址,以检测用户是否正在查看移动网站。
内部application/helpers/url_helper.php
:
if ( ! function_exists('base_url'))
{
/**
* Base URL
*
* Create a local URL based on your basepath.
* Segments can be passed in as a string or an array, same as site_url
* or a URL to a file can be passed in, e.g. to an image file.
*
* @param string
* @return string
*/
function base_url($uri = '')
{
$currentUri = uri_string(); // Get current URI
$currentUri = rtrim($currentUri,'/').'/'; // make sure $uri ends in a '/'
// If the string begins with 'mobile/',
// prepend it to the given array/string
if(strpos($currentUri,'mobile/') === 0)
{
if(is_array($uri)))
array_unshift($uri,'mobile');
else
$uri = 'mobile/'.$uri;
}
$CI =& get_instance();
return $CI->config->base_url($uri);
}
}
答案 1 :(得分:0)
执行此操作的可能(不完全相当)方法是在控制器文件夹中使用名为“mobile”的子文件夹。然后,您可以将所有控制器复制到该目录中,并更改路径/逻辑以适合您的移动站点。
根据CodeIgniter's docs,如果控制器位于子文件夹中,则路径将呈现为* base_url / subfolder / controller / method *。如果您使用模板,您可以放弃加载与普通网站相同的视图,只需在移动文件夹内的控制器中加载mobile_template.php。
似乎比你希望的更多的工作,但你可能不得不做更多的移动网站,而不仅仅是改变CSS文件。