加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何在Zend_Application中使用多个视图(使用Zend_Layout)

发布时间:2020-12-13 21:38:25 所属栏目:PHP教程 来源:网络整理
导读:我有一个布局有4个单独的“块”.他们是: 带有菜单和面包屑的导航面板.这是使用Zend_Navigation构造的. 侧边栏,默认显示一般“新闻” 内容区域,其中将放置每个控制器操作的主输出 标题区域,位于导航上方,通常只显示一些库存文本和照片. 内容区域符合Zend_App
我有一个布局有4个单独的“块”.他们是:

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

内容区域符合Zend_Application文档所述的传统单一视图模型,但其他三种模型不符合.它们都有合理的默认视图可供使用,但控制器需要能够在需要时覆盖它们.例如,管理页面覆盖“新闻”视图以显示系统上最近采取的管理操作的日志是有意义的.

然而,Zend_Layout / Zend_Application示例都假定单个视图(它们调用<?php echo $this-> layout() – > content;?>.

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

解决方法

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

例如,采用以下布局文件:

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

这里有2个命名段,分别是“内容”和“导航”.默认情况下,视图脚本的输出将呈现为“内容”段.为了将输出呈现到“nav”段,您可以在控制器中执行以下操作:

<?php

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

?>

与ActionStack操作助手一起使用时,此功能特别有用.例如,您处于管理页面,并且您想要覆盖“nav”部分,然后您可以确定每个控制器要将哪个部分渲染到该段.解释这个的最好方法是通过代码示例:

<?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
    }
}

?>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读