2010-01-25 17 views
5

Ho un modulo che si estende da Zend_Form. Sto mettendo la forma in un decoratore ViewScript come questo:zend_form ViewScript decorator/passando argomenti

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

mi piacerebbe passare una variabile a questo ViewScript, ma non sono sicuro di come questo potrebbe essere fatto.

Poiché il partial esegue il rendering come Zend_View (consentendo $ this-> app_store_icon per il rendering), sembra che ci debba essere un modo per passare le variabili da rendere. Ho provato il seguente ma senza risultato.

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

Qualsiasi aiuto su come ottenere questo risultato sarebbe apprezzato.

grazie

risposta

10

Questo è un po 'complicato, mi ha portato bout una mezz'ora per capirlo, ma si può fare :)

Il punto è, che si sta passando le opzioni per il decoratore ViewScript e non all'elemento. Aggiungendo l'opzione:

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

o una serie di opzioni:

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

Ottenere che nella parziale, test.phtml:

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

Nel primo caso, con una possibilità passò Sarà $option['foo'] e nel secondo sarà $option[0]['foo']

H TH :)

+0

Personalmente ho trovato il secondo metodo che hai fornito per essere più efficace del primo. Grazie :) – jjmu15

2

V'è un altro paio di possibili modi per raggiungere l'aggiunta di un'icona all'interno di una forma, che penso che si dovrebbe prendere in considerazione,

Una potrebbe essere quella di aggiungere la tua tipo di elemento, e aggiungere un decoratore personalizzato per l'icona (faccio questo per aggiungere semplice? icone per la guida successiva o file browser per formare elementi). Questo è un affare abbastanza semplice da fare.

L'altro sarebbe semplicemente aggiungere un decoratore HtmlTag al proprio elemento, al quale è possibile specificare gli attributi come src come opzioni.

Queste due soluzioni presentano in realtà un altro vantaggio nascosto oltre a rendere le cose più semplici da gestire, inoltre rimuovono l'utilizzo dell'helper di viste parziali, che viene utilizzato una volta per ogni decoratore di viewcript in uso.

L'helper delle viste parziali può aggiungere immensamente alla memoria e al tempo di overhead del modulo (che è già abbastanza grande tra l'altro), questo è aggravato quando si utilizza il decoratore di viewscript sugli elementi anziché sull'intera forma!

2

Avevo bisogno di passare un codice html che indica lo stato di un punteggio nel file viewscript.phtml. Ho trovato un modo più semplice rispetto al passare con il decoratore, che è passando il valore dall'azione del controller come se lo si passasse al normale script di vista zend. per esempio:

<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; ?> 

E lì si può passare qualsiasi codice html reso .. credo che avrebbe funzionato per le icone ..

Mohannad

+0

ho trovato la risposta a questa domanda circa tre giorni fa. Mi aiuti molto! Grazie! Sono pessimo inglese, mi dispiace. –

Problemi correlati