假設有一段 layout script 內容是
<?php echo $this->layout()->menu; ?>
<?php echo $this->layout()->content; ?>
上面的 meuu 內容假設是會照資料庫而抓出動態選單 , 可以另外寫個 Controller 來作 , 例如 MenuController class MenuController extend Zend_Controller_Action {
extend Zend_Controller_Action {
function indexAction() {
/* 呼叫一些資料庫指令也 assign 一些東西給 viewscript */
$this->_helper->viewRenderer->setResponseSegment('menu');
}
}
這個物件比較關鍵的是 setResponseSegment('menu') 那段 , 它定義了目前的 action 要 render 到 Response 物件中的 menu 區段去 , 因為有用了 Zend_Layout 的 MVC 模式 , 因此等於是定義輸出內容將會在 Layout Script 中的 menu 那段 現在我們真正的主 Controller 可以這麼個寫
class IndexController extend Zend_Controller_Action { function init() { parent::init(); $this->_helper->actionStack('index','menu'); } function indexAction() { // 這是我主要的程式碼 } }
上面 IndexController 一開始初始化時就呼叫 actionStack , 這樣會讓目前的 controller/action 跑完之後 , 也會繼續去跑堆疊中的 controller/action 因此結果就很妙了 , IndexController/indexAction 的主要輸出內容將會是輸出到 $this->layout()->content , 而接著會去跑 MenuController/indexAction 且輸出到 $this->layout()->menu , 這樣整個網站的程式流程看起來就非常漂亮了 !!!
找 zf 的資料找到您的網站來
發現真的寶庫
受用無窮!!!!
非常感謝分享啊
其實 ZF 挺慢的說
而且這招 …. 雖然方便 , 但會讓流程亂了
我還是喜歡 YII 的 widget 作法