Могу ли я иметь несколько макетов в Zend Framework? - PullRequest
3 голосов
/ 28 ноября 2010

У меня есть яркая страница с изображениями ротаторов в клиентской части.

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

Небольшая подсказка была бы заметна

Ответы [ 4 ]

6 голосов
/ 28 ноября 2010

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

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
1 голос
/ 04 июля 2012

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

class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout

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

1 голос
/ 25 марта 2011

попробуй

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

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

1 голос
/ 28 ноября 2010

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

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

Модуль ресурсов приложения ModuleLayout

Помощник действий контроллера ModuleLayoutLoader

...