好的,这让我有些发疯。
我创建了一个移动布局,主要用于 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'