2009-10-23 2 views
60

Я уверен, что это простой лайнер, но я не могу найти его.Как переключить файлы макета в Zend Framework?

Как я могу использовать другой файл макета для конкретного действия?

Обновление: Это сработало для меня, спасибо!

// Within controller 
$this->_helper->_layout->setLayout('other-layout') //other-layout.phtml 

//Within view script 
<?php $this->layout()->setLayout('other-layout'); ?> 
+0

Может кто-то исправить '_helper_layout' он должен быть' _helper-> layout' – MitMaro

+0

получил его. благодаря! – Andrew

ответ

62

Изнутри контроллера:

$this->_helper->layout->setLayout('/path/to/your/layout_script'); 

(через these docs)

EDIT: Я должен отметить, что путь относительно независимо от вашего каталога раскладки (по умолчанию, это application/layouts/scripts/)

+4

Или, если путь компоновки установлен правильно ('$ layout-> setLayoutPath ('application/layouts/scripts')'), используйте '$ this -> _ helper_layout-> setLayout ('alternative_layout')' для ссылки 'application/layouts/скрипты/alternative_layout.phtml'. – chelmertz

+0

Изнутри вида: layout() -> setLayout ('/ path/to/your/layout_script')?> – Travis

+0

@Travis: Мне не нужна такая логика в сценарии вида, если только вы не получили действительно небольшое количество сценариев просмотра, чтобы вы знали, где отлаживать эти критические параметры приложения. – chelmertz

13

Вы также можете использовать как этот

// Within controller 
Zend_Layout::getMvcInstance()->setLayout('layout_name'); 

//Within view script 

<?php $this->layout()->setLayout('layout_name'); ?> 

Ваш макет должен быть в/layouts/scripts/folder, в противном случае вам нужно указать путь. Не нужно писать .phtml, просто имя макета

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