在这种情况下,我通常使用带有钩子的前端控制器插件dispatchLoopShutdown()
,该钩子执行所需的数据访问并将数据添加到视图/布局中。然后布局脚本呈现该数据。
可根据要求提供更多详细信息。
[更新]
假设您想在布局中显示来自您的数据库(或 Web 服务或 RSS 提要)的最后 X 个新闻项目,与请求的控制器无关。
您的前端控制器插件可能如下所示application/plugins/SidebarNews.php
:
class My_Plugin_SidebarNews
{
public function dispatchLoopShutdown()
{
$front = Zend_Controller_Front::getInstance();
$view = $front->getParam('bootstrap')->getResource('view');
$view->sidebarNews = $this->getNewsItems();
}
protected function getNewsItems()
{
// Access your datasource (db, web service, RSS feed, etc)
// and return an iterable collection of news items
}
}
确保使用前端控制器注册插件,通常在application/configs/application.ini
:
resource.frontController.plugins.sidebarNews = "My_Plugin_SidebarNews"
然后在你的布局中,像往常一样渲染,也许在application/layouts/scripts/layout.phtml
:
<?php if (isset($this->sidebarNews) && is_array($this->sidebarNews) && count($this->sidebarNews) > 0): ?>
<div id="sidebarNews">
<?php foreach ($this->sidebarNews as $newsItem): ?>
<div class="sidebarNewsItem">
<h3><?= $this->escape($newsItem['headline']) ?></h3>
<p><?= $this->escape($newsItem['blurb']) ?></p>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
明白了吗?