0

好的,这让我有些发疯。

我创建了一个移动布局,主要用于 iPad。我在 AppController 中使用 beforeRender() 函数来检测移动客户端并相应地切换主题。

当我使用 iOS 模拟器在本地开发服务器上测试移动站点时,一切正常。主题被正确加载。但是,当我在在线生产服务器上访问它时,没有加载移动主题。我看到了内容,但没有任何样式。

在线测试可以在这里找到:http ://www.anuragdesign.com/test/mbv

为什么会这样?非常感谢任何输入。

更新:

以下是相关的代码片段:

在我的AppController.php

public function beforeRender() { 
    if($this->RequestHandler->isMobile()) {
        $this->theme = 'mobile';
    } 

}

/lib/cake/Network/CakeRequest.php

protected $_detectors = array(
    'get' => array('env' => 'REQUEST_METHOD', 'value' => 'GET'),
    'post' => array('env' => 'REQUEST_METHOD', 'value' => 'POST'),
    'put' => array('env' => 'REQUEST_METHOD', 'value' => 'PUT'),
    'delete' => array('env' => 'REQUEST_METHOD', 'value' => 'DELETE'),
    'head' => array('env' => 'REQUEST_METHOD', 'value' => 'HEAD'),
    'options' => array('env' => 'REQUEST_METHOD', 'value' => 'OPTIONS'),
    'ssl' => array('env' => 'HTTPS', 'value' => 1),
    'ajax' => array('env' => 'HTTP_X_REQUESTED_WITH', 'value' => 'XMLHttpRequest'),
    'flash' => array('env' => 'HTTP_USER_AGENT', 'pattern' => '/^(Shockwave|Adobe) Flash/'),
    'mobile' => array('env' => 'HTTP_USER_AGENT', 'options' => array(
        'AvantGo','DoCoMo', 'Fennec', 'iPad', 'J2ME', 'MIDP', 'NetFront', 'Nokia', 'Opera Mini', 'Opera Mobi', 'PalmOS', 'PalmSource',
        'portalmmm', 'Plucker', 'ReqwirelessWeb', 'SonyEricsson', 'Symbian', 'UP\\.Browser',
        'webOS', 'Windows CE', 'Windows Phone OS', 'Xiino'
    )),
    'requested' => array('param' => 'requested', 'value' => 1)
);

移动样式表位于:

/app/View/Themed/mobile/webroot/css/mobile.css

并在布局文件中调用启动页面/app/View/Themed/mobile/Layouts/splash.ctp,如下所示:

<?php echo $this->Html->css(array('reset.defaults', 'mobile', 'superfish')); ?>

更新:

在线设置上的 debug($_SERVER['HTTP_USER_AGENT') 产生以下输出:

'Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'
4

1 回答 1

0

修复(好吧)

我做了几个步骤,最终似乎解决了它。问题似乎是在在线生产服务器上,它会尝试从常规 webroot 文件夹中提供样式表,而不是我的主题文件夹。我不知道为什么,但你去。

所以首先,我复制了所有移动样式表并将它们放在 /app/webroot/css/ 中(而不是它们应该放在 /app/View/Themed/mobile/webroot/css/ 的位置。然后我还重命名了任何使用的元素在移动和非移动视图中确保移动视图(位于 /app/View/Themed/mobile/Elements)都有唯一的名称。

这似乎奏效了,但总的来说是一个相当不简洁的解决方案。因此,如果有人有更好的解决方案,我很想听听。

于 2012-04-26T17:46:48.773 回答