Php 具有默认和移动布局的Zend框架
目前我有一个zend framework应用程序,我将它与wurfl用户代理集成,这样我就可以在移动版和桌面版之间切换,我的插件驻留在库中Php 具有默认和移动布局的Zend框架,php,zend-framework,wurfl,Php,Zend Framework,Wurfl,目前我有一个zend framework应用程序,我将它与wurfl用户代理集成,这样我就可以在移动版和桌面版之间切换,我的插件驻留在库中 <?php class Zc_Controller_Plugin_TemplatePicker extends Zend_Controller_Plugin_Abstract { protected $useragent; public function postDispatch(Zend_Controller_Request_Abstrac
<?php
class Zc_Controller_Plugin_TemplatePicker extends Zend_Controller_Plugin_Abstract
{
protected $useragent;
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$this->useragent = $bootstrap->getResource('useragent');
if($this->useragent->getDevice()->getType() == 'mobile')
{
Zend_Layout::getMvcInstance()->setLayout('mobile');
}
}
}
layoutloader代码是
<?php
class Zc_Controller_Action_Helper_LayoutLoader extends
Zend_Controller_Action_Helper_Abstract
{
public function preDispatch(){
$bootstrap = $this->getActionController()->getInvokeArg('bootstrap');
$config = $bootstrap->getOptions();
Zend_Registry::set('config', $config);
$module = $this->getRequest()->getModuleName();
$controller = $this->getRequest()->getControllerName();
$action = $this->getRequest()->getActionName();
$layoutScript = "layout";
if (isset($config[$module]['resources']['layout']['layout'])) {
$layoutScript = $config[$module]['resources']['layout']['layout'];
}
$this->getActionController()->getHelper('layout')->setLayout($layoutScript);
}
}
如果您希望为特定控制器设置某些特定布局,可以使用以下代码:
class Custom_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
public function preDispatch()
{
$front = Zend_Controller_Front::getInstance();
$layout = Zend_Layout::getMvcInstance();
switch ($front->getRequest()->getControllerName()) {
case "index":
$layout->setLayout('home');
break;
case "login":
$layout->setLayout('login');
break;
default:
$layout->setLayout('default');
}
}
}
你的问题到底是什么?如果您想要一个控制器具有两个单独的布局,请修改mobile.phtml
和layout.phtml
,使它们不同。。。使用PC访问您的站点以查看布局2,使用手机访问站点以查看布局1。如果用户代理嗅探插件正常工作,这应该是您所需要的一切。一切正常。我可以从不同的设备查看这两种不同的布局,我的问题是使用已经为移动模板的默认控制器定义的控制器。但我仍然不知道您的问题是什么,对不起。。。
class Custom_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
public function preDispatch()
{
$front = Zend_Controller_Front::getInstance();
$layout = Zend_Layout::getMvcInstance();
switch ($front->getRequest()->getControllerName()) {
case "index":
$layout->setLayout('home');
break;
case "login":
$layout->setLayout('login');
break;
default:
$layout->setLayout('default');
}
}
}