如何在Zend Framework中切换布局文件?

60

我相信这只是一个简单的一行代码,但我似乎找不到它。

如何为特定操作使用不同的布局文件?

更新:这对我有用,谢谢!

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

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

有人能修复 _helper_layout 吗?应该是 _helper->layout - MitMaro
2个回答

62

在控制器内部:

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

(通过这些文档

编辑:我应该提到路径是相对于您的布局目录的(默认情况下,它是application/layouts/scripts/


4
如果 layoutpath 被正确设置了(例如 $layout->setLayoutPath('application/layouts/scripts')),可以使用 $this->_helper_layout->setLayout('alternative_layout') 来引用 application/layouts/scripts/alternative_layout.phtml - chelmertz
在视图内部:<?php $this->layout()->setLayout('/path/to/your/layout_script') ?> - Travis
@Travis:我不会希望这种逻辑出现在视图脚本中,除非你只有很少量的视图脚本,这样你才知道在哪里调试这些应用程序关键设置。 - chelmertz
你知道如何从Bootstrap类中切换它吗? - Starx
如果您在路径设置方面遇到问题,最好使用绝对路径:$layout->setLayoutPath(APPLICATION_PATH . 'layouts/scripts'); - Zachary Schuessler

13

你也可以像这样使用

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

//Within view script

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

你的布局必须在/layouts/scripts/文件夹中,否则你需要指定路径。不需要写 .phtml,只需命名布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接