2010-01-25 143 views
5

我有一個從Zend_Form擴展的表單。我把形式爲ViewScript裝飾這樣的:zend_form ViewScript裝飾器/傳遞參數

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml')))); 

我想在一個變量,這個ViewScript通過,但我不知道如何可以這樣做。

由於部分呈現爲Zend_View(允許$ this-> app_store_icon進行渲染),因此似乎應該有一種方法來傳遞要呈現的變量。我嘗試了以下,但無濟於事。

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'),array('app_store_picon'=>$current_app_store_picon)))); 

任何有關如何完成這項任務的幫助將不勝感激。

感謝

回答

10

這一個有點棘手,我花了回合半小時的數字出來,但它可以做到:)

的一點是,您傳遞的選項裝飾者ViewScript而不是元素。添加選項:

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml', 
    'foo'=>'baz', 
)))); 

或選項數組:

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml', 
    array(
     'foo'=>'baz', 
     'spam'=>'ham', 
    ), 
)))); 

獲得了這一點在部分,test.phtml

$option = $this->element->getDecorator('ViewScript')->getOptions(); 

在第一種情況,其中一個選項傳遞它將成爲$option['foo'],在第二個將成爲$option[0]['foo']

H TH :)

+0

我個人發現你提供的第二種方法比第一種方法更有效。謝謝:) – jjmu15 2012-06-08 15:42:40

2

還有另外幾個可能的方式來實現增加一個形式,我想你應該考慮內部的圖標,

之一將是添加自己的元素類型,並添加自定義裝飾的圖標(我這樣做是爲了添加簡單?接下來的幫助圖標或文件瀏覽器來形成元素)。這是一件相當簡單的事情。

另一種方法是簡單地將HtmlTag裝飾器添加到元素中,您可以將其作爲選項指定屬性(如src)。

這兩個解決方案實際上帶來了另一個隱藏的好處,使事情變得更簡單,它們也刪除了部分視圖助手的用法,這對每個使用的viewscript裝飾器都使用一次。

部分視圖幫助程序可以極大地增加您的表單的內存和時間開銷(這種方式已經相當大),當您在元素上使用視圖裝飾器而不是在整個表單上時,這會加劇!

2

我需要將表示評分狀態的html代碼傳遞給viewscript.phtml文件。我發現一個比裝飾器更簡單的方法,就是通過傳遞控制器動作的值,就像將它傳遞給普通的zend視圖腳本一樣。例如:

<Controller> 
// pass status and score to view 
$this->view->status = $this->_sitenamehelper->get_status($id); 
$this->view->score = $this->_sitenamehelper->get_score($id); 

<viewscript.phtml partial file> 
<?php $form = $this->element; ?> 
<b>Status: </b><?php echo $form->getView()->status; ?> 
<b>Score: </b><?php echo $form->getView()->score; ?> 

在那裏,你可以通過任何HTML呈現的代碼..我想它會適用於圖標..

Mohannad

+0

我在三天前找到了這個問題的答案。 你幫了我很多! 謝謝! 我很糟糕英語,很抱歉。 – 2013-03-29 16:48:01