如何在Zend Framework插件中访问布局对象?

3

我正在尝试为控制器中的每个操作使用布局。例如,我在索引控制器中有三个操作。这些是indexAction、testAction和welcomeAction。我创建了三个XML布局文件:index.xml、test.xml和welcome.xml。最后,我创建了一个插件。

class Moon_Layout_Append extends Zend_Controller_Plugin_Abstract{

 public function preDispatch($request){


  $layoutFile = APPLICATION_PATH."/Modules/".$request->module."/layout/".$request->action.".xml";

  $layout = new Zend_Config_Xml($layoutFile,'index');


 }

}

问题是...我该如何访问布局对象来设置从xml中读取的内容?
3个回答

4

通过控制器操作助手可以轻松访问布局功能。您应该能够使用以下代码行检索布局助手。

$layout= Zend_Controller_Action_HelperBroker::getStaticHelper('Layout');

如果您没有使用Zend_Application或其他初始化Layout的方法,您可能需要首先调用以下方法:
Zend_Layout::startMvc();

如果我这样写:$layout->header = "test"; 并在布局文件中通过$this->layout()->header调用它,它不会显示任何内容。你知道为什么吗? - Moon
尝试使用 $view = $layout->getView(); $view->header = 'test';,然后在页面布局中echo $this->header。 - David Snabel-Caunt
dcaunt // 谢谢!! $view->layout()->header = "test"; 成功了!!谢谢你!! - Moon

1

对我只有这个有效

$layout = Zend_Layout::getMvcInstance(); 

 $layout= Zend_Controller_Action_HelperBroker::getStaticHelper('Layout');

没有起作用。


1

这个教程会告诉你需要什么,你可以创建一个用于导航的 XML 并在 layout.phtml 中显示它。

http://www.goodcomputingtips.com/site/2010/09/part-5-adding-menus-using-zend_navigation-a-not-so-quick-quickstart-to-zend-framework/

一个快速的例子:

在你的引导程序中

protected function _initNavigation() {
$this->bootstrap("layout");
$layout = $this->getResource('layout');     
$view = $layout->getView();

$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav');
$navigation = new Zend_Navigation($config);

$view->navigation($navigation); }

在你的layout.phtml文件中。
<?php echo $this->navigation()->menu()->setMaxDepth(1); ?>

在链接中,您可以找到其他配置方式。


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