1

我有 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 文件中手动执行此操作。实际应用中存在太多问题,除了代码看起来与该解决方案相混淆。

怎么做?

4

3 回答 3

1

您可以只为IndexControllerand设置不同的布局OtherController:在init()每个控制器的方法中,您可以添加以下内容:

Zend_Layout::getMvcInstance()->setLayout('some other layout');
于 2012-05-29T02:35:04.733 回答
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 中。

于 2013-01-04T20:07:16.780 回答
0

试试这个:

$(document).ready(function(){

   $("#main").before(//insert header html here);
   $("#main").after(//insert footer html here);

});

我不确定你所说的第四个是什么意思,但如果你想定位一个特定的控制器/动作,你可以抓住 window.location.href 并使你的函数依赖于你想要查找的特定 URL。

希望有帮助。

于 2012-05-29T02:45:30.870 回答