2010-11-28 3 views
3

У меня есть яркая страница с ротаторами изображений в передней части для клиентов.Могу ли я иметь несколько макетов в Zend Framework?

Для внутреннего использования я хочу иметь разную компоновку. Могу ли я иметь несколько макетов?

Небольшой намек будет заметно

ответ

6

создать плагин макета для переключения раскладки, когда модуль не по умолчанию называется:

class MyApplication_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout 
{ 

    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     switch ($request->getModuleName()) { 
      case 'admin': $this->_moduleChange('admin'); 
     } 
    } 

    protected function _moduleChange($moduleName) { 
     $this->getLayout()->setLayoutPath(
      dirname(dirname(
       $this->getLayout()->getLayoutPath() 
      )) 
      . DIRECTORY_SEPARATOR . 'layouts/scripts/' . $moduleName 
     ); 
     $this->getLayout()->setLayout($moduleName); 
    } 

} 

Тогда в моем Bootstrap, я делаю это:

Zend_Layout::startMvc(
      array(
       'layoutPath' => self::$root . '/application/views/layouts/scripts', 
       'layout' => 'layout', 
       'pluginClass' => 'MyApplication_Layout_Controller_Plugin_Layout' 
      ) 
     ); 

Нестандартные макеты входят в папку с именем после того, как модуль, так что моя структура каталогов выглядит следующим образом:

/path/to/application/views/layouts/scripts/layout.phtml --> default layout 

/path/to/application/views/layouts/scripts/admin/admin.phtml --> admin layout 
+0

спасибо ... извините за ответ поздно –

1

Да, вы можете иметь несколько макетов, хотя переключая их на основе запроса не так прямо вперед.

Мне нужно было сделать это достаточно времени, чтобы закончить разработку контроллера-помощника и плагина ресурсов приложений, который вы можете использовать или использовать.

ModuleLayout Application Resource Plugin

ModuleLayoutLoader Controller Action Helper

1

попробовать

//in controller 
$this->_helper->layout->setLayout('layoutName'); 

Это переключит раскладку в layoutName.phtml в папке/просмотреть сценарии вашего модуля;)

+0

Это совсем не работает. Должно быть $ this -> _ helper-> layout-> setLayout ('layoutname') – Andy

+0

Да, вы, очевидно, правы. Я починил это. –

+0

Быстро и эффективно, спасибо за отзыв @ TomášFejfar! –

1

Это неправильно. Линия:

class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout 

должен быть extends Zend_Controller_Plugin_Abstract. В противном случае вы получите сообщение об ошибке mvcSuccessfulActionOnly.

Смежные вопросы