CodeIgniter移动站点路由

时间:2013-03-13 18:03:37

标签: codeigniter url mobile routes

我的网站“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并根据这些变量设置样式表。未来的访问可能是一个问题。

看起来非常简单,但没有得到正确的想法...任何提示我如何使这项工作?

2 个答案:

答案 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文件。