我想使用Zend_Layout生成动态网站。
我的布局(/application/layouts/scripts/layout.phtml)包含以下几行:
...
<body>
<?php echo $this->render('header.phtml') ?>
<div id="content"><?php echo $this->layout()->content ?></div>
<?php echo $this->render('footer.phtml') ?>
</body>
...
如果我浏览到我的索引控制器索引操作 - Zend会自动在$ this-&gt; layout() - &gt;内容中呈现索引视图(application / views / scripts / index / index.phtml)。
现在我想在布局中呈现不同控制器动作的视图。 所以我生成一个新的控制器auth,其中包含一个显示登录表单的操作登录。
我将布局更改为:
...
<body>
<?php echo $this->render('header.phtml') ?>
<div id="content"><?php echo $this->layout()->content ?></div>
<div id="login"><?php echo $this->layout()->login ?></div>
<?php echo $this->render('footer.phtml') ?>
</body>
...
当我浏览索引/索引时,我想在此操作中定义zend应该在$ this-&gt; layout() - &gt; login和例如$ this-中的新闻/列表中呈现auth / login视图&GT;布局() - &GT;含量
索引/索引比一种页面布局 - 和auth / login和news / list一种小部件
怎么做?
答案 0 :(得分:8)
首先建议不惜一切代价避免使用Action视图助手,但无论如何都可能会在ZF 2.0中将其删除。 (ZF-5840)(Why the actionstack is evil)
这与question I asked有关 - 而bittarman的回答非常有用。实现类似功能的最佳方法是拥有一个可以生成“登录”区域的视图助手。例如My_View_Helper_Login
。然后您的布局可以调用$this->login()
,user/login
的查看脚本也可以调用index/index
。只要news/list
从$this->_forward('list', 'news');
呈现内容,只需将请求转发给控制器中的其他控制器/操作即可。 {{1}}
答案 1 :(得分:3)
我还建议不要使用action view helper
。除非您的控制器中有一堆逻辑,否则您可能不需要将另一个请求发送到另一个控制器,只是为了使视图部分呈现。
我建议您只使用视图部分,就像您使用header.phtml
和footer.phtml
一样:
<body>
<?php echo $this->render('header.phtml') ?>
<div id="content"><?php echo $this->layout()->content ?></div>
<div id="login"><?php echo $this->render('auth/login.phtml') ?></div>
<?php echo $this->render('footer.phtml') ?>
</body>
也许您的auth/login.phtml
视图脚本如下所示:
<div id="login_box">
<?php if (empty($this->user)): ?>
Please log in
<?php else: ?>
Hello <?php echo $this->user->name ?>
<?php endif; ?>
</div>
只要在控制器中的某个位置设置视图变量,就可以在视图中调用render view helper
(如果需要,甚至可以调用控制器)。
#index controller
public function indexAction()
{
$this->view->user = Model_User::getUserFromSession();
}
答案 2 :(得分:1)
您可以使用速度不高的
$this->action()
或者您尝试
$this->partial()
(见http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.partial)
答案 3 :(得分:0)
在寻找我自己的问题的答案时,我到了这个页面,这是我的布局被多次调用。这是因为多种原因:
1)我做了一个糟糕的ajax调用,有/ help而不是/ module / help
2)我调用了一个动作,exampleAction(),我不得不放一个
$this->_helper->layout->disableLayout();
防止再次渲染布局。
3)我进行了重定向,尝试使用前进或路线。