How to switch layout files in Zend Framework?
Asked Answered
C

2

60

I'm sure it's a simple one-liner, but I can't seem to find it.

How can I use a different layout file for a particular action?

Update: This worked for me, thanks!

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

//Within view script
<?php $this->layout()->setLayout('other-layout'); ?>
Carnassial answered 23/10, 2009 at 21:20 Comment(1)
Can someone fix _helper_layout it should be _helper->layoutSiloxane
W
62

From inside a Controller:

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

(via these docs)

EDIT: I should mention that the path is relative to whatever your layout directory is (by default, it's application/layouts/scripts/)

Warison answered 23/10, 2009 at 21:26 Comment(5)
Or, if the layoutpath is set correctly ($layout->setLayoutPath('application/layouts/scripts')), use $this->_helper_layout->setLayout('alternative_layout') to reference application/layouts/scripts/alternative_layout.phtml.Terreverte
From inside a view: <?php $this->layout()->setLayout('/path/to/your/layout_script') ?>Rolfe
@Travis: I wouldn't want that kind of logic in a view script unless you only got a really small number of view scripts so you know where to debug for these application critical settings.Terreverte
Do you know how to switch this from the bootstrap class instead.Alenealenson
Best to do an absolute path if you are having problems with pathing: $layout->setLayoutPath(APPLICATION_PATH . 'layouts/scripts');Astir
B
13

You can also use like this

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

//Within view script

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

Your layout must be in /layouts/scripts/ folder, otherwise you need to specify the path also. No need to write .phtml, just name of the layout

Botany answered 26/9, 2011 at 12:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.