0

現在、私は zend フレームワーク アプリケーションを持っています。それを wurfl ユーザー エージェントと統合しているので、モバイル バージョンとデスクトップ バージョンを切り替えることができます。私のプラグインはライブラリにあります。

<?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');
    }

}
 }

そして今、スクリプトファイルmobile.phtmlとlayout.phtmlに2つのレイアウトがあります。モバイルレイアウトに使用できるようにコントローラー機能の一部を使用できますか?また、ブートストラップにレイアウトローダーがあります

    protected function _initLayoutHelper()
{
   // $front = Zend_Controller_Front::getInstance();
   // $front->registerPlugin(new Zc_Controller_Plugin_TemplatePicker());  
    if(!stristr($_SERVER['REQUEST_URI'], '/admin')){
        $this->bootstrap('frontController');
    }
    $layout = Zend_Controller_Action_HelperBroker::addHelper(new Zc_Controller_Action_Helper_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);
}
 }

2つの別々のレイアウトを持つ1つのコントローラクラスを持つことができるように、どこを微調整する必要がありますか?ありがとう!!

4

1 に答える 1

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');
        }
    }

}
于 2012-07-12T07:54:05.170 に答える