0

我的网站“site.xyz.com”被 iframe 编入客户的主网站“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 并根据这些变量设置样式表。未来的访问可能是一个问题。

看起来很简单,但没有得到正确的想法......有什么技巧可以让我完成这项工作吗?

4

2 回答 2

1

您可以制作自己的base_url()- 函数,通过检查返回的内容来检查用于查看该页面的 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);
    }
}
于 2013-03-13T19:26:59.117 回答
0

一种可能(不完全漂亮)的方法是在您的控制器文件夹中有一个名为“mobile”的子文件夹。然后,您基本上可以将所有控制器复制到该目录中,并更改路径/逻辑以适合您的移动站点。

根据CodeIgniter 的文档,如果控制器位于子文件夹中,则路由将呈现为 *base_url/subfolder/controller/method*。如果您使用模板,您可以加载与普通站点相同的视图,只需在 mobile 文件夹内的控制器中加载 mobile_template.php 即可。

看起来工作量比您希望的要多,但您可能需要对您的移动网站做更多的工作,而不仅仅是更改 CSS 文件。

于 2013-03-13T18:17:30.013 回答