この場合、私は通常、必要なデータ アクセスを実行し、データをビュー/レイアウトに追加するフックを備えたフロント コントローラー プラグインを使用します。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; ?>
私が何を意味するか分かりますか?