zend framework 如何在整體佈局中嵌入個區域性佈局?
阿新 • • 發佈:2018-11-20
如何在整體佈局中嵌入個區域性佈局?
玩zend framework有一年半了,經常沒事時去解析它的原始碼,也因此對MVC模式的設計實現有了更深瞭解,同時在技術應用上也產生了些想法。之前覺認為Zend framework在佈局應用上只能使用個佈局模板,但在經過對程式碼的分析,找到了一個可以使用整體佈局中巢狀一個區域性佈局。
如上圖所示,對於整體佈局即導航欄,它是所有模組中檢視都要出現在,左側的“產品分類”和“最新產品”希望它能夠在點選它們下面的連結時下面右側對應相應ACTION的檢視能夠正常出面,這樣我們在保用整體佈局的同時也用到了區域性的佈局。
實現程式碼如下:
下面為對應controller的檔案程式碼:
class Product_IndexController extends Zend_Controller_Action
{
public $product_layout;
public function init()
{
$product_layout = new Zend_Layout();//區域性佈局的Zend_Layout
$product_layout->setLayoutPath(APPLICATION_PATH.'/modules/product/layouts/scripts/');//設定區域性佈局的指令碼的位置 $product_layout->setLayout('index'); //區域性佈局模板檔名 $this->product_layout = $product_layout; $product_category = new Application_Model_ProductCategoryModel(); $product = new Application_Model_ProductModel(); $this->view->product_category = $product_category; $this->view->product = $product; } public function indexAction () { $this->view->test = 123; } public function showAction() { $this->view->test = 'show'; }
public function postDispatch() { $controller = $this->_request->getControllerName(); $action = $this->_request->getActionName(); $content = array('content'=>$this->view->render('/'.$controller.'/'.$action.'.phtml')); $this->product_layout->assign($content); $this->_response->setBody($this->product_layout->render()); $viewRenderer = Zend_Controller_Action_HelperBroker::getExistingHelper('viewRenderer'); $viewRenderer->setNoRender(true); } }
下面對應佈局指令碼:
<div class="content-left">
<div class="product-category">
<div class="product-category-header">產品分類</div>
<div>
<ul class="product-category-list">
<?php
$this->product_category->reset();
if (!$this->product_category->isEmpty()){
do {
echo '<li><a href="#">'.$this->product_category.'(?)</a></li>';
}while ($this->product_category->next());
}
?>
</ul>
</div>
</div>
<div class="product-new">
<div class="product-new-header">最新產品</div>
<div>
<ul class="product-new-list">
<?php
$this->product->loadNewProductsData();
if (!$this->product->isEmpty()){
do {
echo '<li><a href="'.$this->url(array('module'=>'product','controler'=>'index','action'=>'show'),null,true).'">'.$this->product->product_name.'</a></li>';
}while ($this->product->next());
}
?>
</ul>
</div>
</div>
</div>
<div class="content-right">
<?=$this->layout()->content ?>
</div>
下面為對應的action檢視指令碼
<?php
echo $this->test;
以上程式碼能夠實現整體佈局裡嵌入區域性佈局。
好睏呀!望高手指教。