Zend Layout 在每个页面上渲染一些部分

4
我是新手使用Zend Framework,正在尝试了解他们如何渲染内容。 我正在创建一个网站,其中菜单是从数据库动态创建的。如果我调用正确的操作,我可以正确地看到menu.phtml视图。
现在我希望每个页面都呈现这个menu.phtml,但我不知道该怎么做。我读过关于placeholders、helpers等的文章,但似乎还是不懂。
我想我必须调用操作来生成menu.phtml,将其呈现并放入一个placeholder中,然后可以从我的layout.phtml中调用它,但我不知道该如何实现。
提前感谢。
解决方案:
在layout.phtml中,我添加了以下行:
<?php echo $this->action('menu',
                            'page',
                            null,
                            array());?>

这将访问PageController中的menuAction并运行它。变量将被填充,需要的代码将在渲染menu.phtml视图脚本之前立即执行。

1个回答

4
你可以像这样做:
假设你正在一个名为“header”的div中显示菜单。
<div id='header'><?= $this->render('menu.phtml'); ?></div>

您需要在工作控制器中添加正确的路径,以便访问menu.phtml。
public function init() {

        $this->view->addScriptPath(APPLICATION_PATH . '/views/scripts/');
}

如果您想将值传递到menu.phtml文件中。

<?php echo $this->partial('page/menu.phtml', array('var1'=>'value1','var2'=>'value2') ); ?>

好的,现在错误已经消失了,但是没有任何内容显示出来。这是我做的:在一个名为AlbumController.php的控制器中,我添加了addScriptPath行。在layout.phtml中,我添加了render('menu.phtml')。当我访问mywebsite/Album时,它会显示相册页面,但是menu.phtml不会显示。 - hhoud
你能展示一下涉及到的layout.phtml代码吗?同时请根据你的目录结构验证路径是否正确。 - Muhammad Zeeshan
这是layout.phtml文件 <?php echo $this->doctype() ?><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试</title> <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?> </head> <body> <div id="container"> <div id="menu"> <h1>欢迎!</h1> <?php $this->render('page/menu.phtml'); ?> </div> <div id="content"> <?php echo $this->layout()->content; ?> </div> <div id="footer"> 一些页脚信息 </div> </div> </body> </html> - hhoud
我知道部分方法,但问题是值来自数据库。无法从layout.phtml调用数据库。如果您可以调用多个控制器的多个URL,并让它们在一个页面上一起呈现视图,那么所有这些都会变得更加容易。 那么,如何获取MenuController中的代码并运行它以将数据库中的值传递到我的menu.phtml中? - hhoud
如果这个解决方案帮助您显示菜单,您可以接受答案 :) - Muhammad Zeeshan
显示剩余9条评论

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