2010-01-31 49 views
1

給定一個html/javascript'小部件',它在使用之前需要定製某些字段。例如,css class id必須是唯一的,因爲小部件可能會在同一頁面上多次出現。在Zend Framework中創建更靈活的視圖

比方說,我想保留作爲模板存儲的小部件的標記(js/html),以便我可以填寫需要在resuse期間自定義的值。我知道Zend Framework的視圖至少給你提供了這個功能的一部分,但是每個視圖通常都和一個特定的控制器相關聯。鑑於這個小部件可以從任何控制器創建,是的,仍然需要能夠訪問存儲在控制器(或模型)中的一些屬性。我應該在哪裏放置小部件標記,然後如何填寫自定義值?

我可以創建一個可以在同一頁面(不止一次出現)以及其他頁面中重複使用的自定義視圖嗎?如果是這樣,我該如何設置?

回答

3

聽起來像你需要一個ViewHelperhttp://framework.zend.com/manual/en/zend.view.helpers.html。創建一個自定義幫助程序,它將從模型中獲取數據並僅輸出它。這種方式不依賴於任何控制器,可以在佈局或任何視圖腳本中調用。例如:

// views/helpers/Widget.php 
class Zend_View_Helper_Widget extends Zend_View_Helper_Abstract 
{ 
protected $_model = null; 

protected $_view = null; 

public function widget() 
{ 
    $data = $this->_getDataFromModel(); 

    return $this->_view->partial('widget.phtml', array('data' => $data)); 
} 

public function setView(Zend_View_Interface $view) 
{ 
    if($this->_view === null) { 
     $this->_view = $view; 
    } 

    return $this->_view; 
} 

protected function _getDataFromModel() 
{ 
    $this->_model = $this->_getModel(); 
    return $this->_model->getDataForWidget(); 
} 

protected function _getModel() 
{ 
    if($this->_model === null) { 
     $this->_model = new Model_Widget(); // or whatever it's called 
    } 
    return $this->_model; 
} 

的部分腳本:

// views/scripts/widget.phtml 
<div class="widget-class"><?php echo $this->data; ?></div> 

而且當你需要它在你的看法只是把它像<?php echo $this->widget(); ?>

請注意,我渲染部件在一個單獨的局部視圖腳本,只是爲了避免在幫助程序中存在html/css。

希望這有助於讓你開始:)

1

Zend_View_Helper_Partial

例子:

<?php echo $this->partial('partial.phtml', array(
    'css_id' => 'foobar')); ?> 

要從任何其他模塊運行以下命令:

<?php echo $this->partial('partial.phtml', 'partials_module', array(
    'css_id' => 'foobar')); ?> 

在您的局部視圖腳本(partial.html),然後您可以訪問$this->css_id