gpt4 book ai didi

php - 如何在 Zend_Application 中使用多个 View (使用 Zend_Layout)?

转载 作者:可可西里 更新时间:2023-11-01 00:27:13 27 4
gpt4 key购买 nike

我有一个包含 4 个独立“ block ”的布局。它们是:

  • 带有菜单和面包屑的导航面板。这是使用 Zend_Navigation 构建的。
  • 侧边栏,默认显示一般“新闻”
  • 一个内容区域,其中放置每个 Controller 操作的主要输出
  • 标题区域,位于导航上方,通常只显示一些常用文本和一张照片。

内容区域符合 Zend_Application 文档所述的传统单一 View 模型,但其他三个则不然。它们都有合理的默认 View 可供使用,但 Controller 需要能够在需要时覆盖它们。例如,管理页面覆盖“newsy” View 以显示最近在系统上执行的管理操作的日志是有意义的。

Zend_Layout/Zend_Application然而,示例都假定一个 View (它们称为 <?php echo $this->layout()->content; ?>

如何实现这种布局覆盖?我想到的唯一解决方案是存储覆盖 Zend_View里面的Zend_Registry ,但这看起来像是用胶带把东西粘在一起;)

最佳答案

我相信您所指的是所谓的“命名段”。 Zend Framework 的响应对象支持这些所谓的“命名段”,并允许您将主体内容分成不同的段。

例如采用以下布局文件:

<div id="nav">
<?php echo $this->layout()->nav ?>
</div>
<div id="content">
<?php echo $this->layout()->content ?>
</div>

这里有 2 个命名段,分别是“content”和“nav”。默认情况下, View 脚本的输出将呈现到“内容”部分。为了将输出渲染到“nav”段,您可以在 Controller 中执行以下操作:

<?php

$response = $this->getResponse();
$response->insert('nav', $view->render('nav.phtml'));

?>

此功能在与 ActionStack 操作助手结合使用时变得特别有用。举个例子,你在一个管理页面,你想覆盖“导航”部分,然后你可以确定每个 Controller 你想要呈现给那个部分的部分。最好的解释方法是通过代码示例:

<?php

class PageController extends Zend_Controller_Action
{
public function barAction()
{
// this would render the output of NavController::menuAction()
// to the "nav" segment (note how we set the response segment in the
// NavController in order to do this)
$this->_helper->actionStack('menu', 'nav');
}
}

class NavController extends Zend_Controller_Action
{
public function menuAction()
{
$this->_helper->viewRenderer->setResponseSegment('nav');
// do stuff
}
}

?>

关于php - 如何在 Zend_Application 中使用多个 View (使用 Zend_Layout)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3620337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com