我有Zend Framework MVC应用程序,其模块结构如上所述:
/application
/layouts
/sripts
/layout.phtml
/modules
/default
/controllers
/IndexController.php
/OtherController.php
/views
/scripts
/index
/index.phtml
/second.phtml
/third.phtml
/fourth.phtml
/other
/index.phtml
/second.phtml
/third.phtml
/fourth.phtml
在我的layout.phtml中,我有一行
<div id="main">
<?= $this->layout()->content ?>
</div>
我希望在IndexController和OtherController的每个动作中包装渲染的动作视图,除了第四个,使用一些代码,如在开始时为<div id='top'></div>
,在渲染动作视图结束时为<div id='bottom'></div>
。
我不想在每个动作视图* .phtml文件中手动执行此操作。实际应用中有太多,除了代码看起来很混乱。
怎么做?
答案 0 :(得分:1)
您只能为IndexController
和OtherController
设置不同的布局:在每个控制器的init()
方法中,您可以添加以下内容:
Zend_Layout::getMvcInstance()->setLayout('some other layout');
答案 1 :(得分:1)
在布局文件中,您可以回显布局变量。这通常是我们放置动作渲染的html的地方。您可以将多个操作的渲染附加到单个布局变量中,它们将以LIFO顺序显示。以下是将该变量插入布局文件的方法:
<?php echo $this->layout()->myLayoutVariable; ?>
您还可以在布局文件中设置占位符变量:
<?php echo $this->placeholder('myPlaceholderVariable'); ?>
在您的一个视图文件中,您可以为此占位符变量提供html内容:
<?php
$this->placeholder('myPlaceholderVariable')->append('<p>HTML GOES HERE</p>');
?>
如果没有为占位符变量设置任何值,则不会在布局文件中呈现任何内容。但是,如果您为该占位符变量设置了一个值,它将被插入到html中。
答案 2 :(得分:0)
试试这个:
$(document).ready(function(){
$("#main").before(//insert header html here);
$("#main").after(//insert footer html here);
});
我不确定第四个是什么意思,但是如果你想要定位一个特定的控制器/动作,你可以抓住window.location.href并使你的函数依赖于你想要寻找的特定URL。
希望有所帮助。