2010-01-25 9 views
5

J'ai un formulaire qui s'étend de Zend_Form. Je place la forme dans un décorateur ViewScript comme ceci:zend_form décorateur ViewScript/passant des arguments

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

Je voudrais passer une variable à cette ViewScript mais ne sais pas comment cela pourrait se faire. Étant donné que le rendu partiel en Zend_View (permettant $ this-> app_store_icon pour le rendu), il semble qu'il devrait y avoir un moyen de passer des variables à rendre. J'ai essayé ce qui suit, mais en vain.

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

Toute aide sur la façon de procéder serait appréciée.

grâce

Répondre

10

Celui-ci est un peu difficile, m'a pris combat une demi-heure pour le comprendre, mais il peut être fait :)

Le point est que vous passez les options le décorateur ViewScript et non à l'élément. Ajout de l'option:

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

ou un éventail d'options:

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

Obtenir que dans la partie, test.phtml:

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

Dans le premier cas, avec une option transmit sera $option['foo'] et dans la seconde ce sera $option[0]['foo']

H TH :)

+0

J'ai personnellement trouvé la deuxième méthode que vous avez fournie pour être plus efficace que la première. Merci :) – jjmu15

2

Il y a encore deux façons possibles pour parvenir à ajouter une icône dans une forme, que je pense que vous devriez considérer,

On serait d'ajouter votre propre type d'élément, et ajouter un décorateur personnalisé pour l'icône (je fais cela pour ajouter simple? icônes pour l'aide suivante ou fichiers de navigateurs pour former des éléments). C'est une affaire assez simple à faire. L'autre serait d'ajouter simplement un décorateur HtmlTag à votre élément, auquel vous pouvez spécifier les attributs tels que src en tant qu'options.

Ces deux solutions apportent en réalité un autre avantage caché en plus de simplifier la gestion des tâches, elles suppriment également l'utilisation de l'assistant de vue partielle, qui est utilisé une fois pour chaque décorateur de vues utilisé. L'assistant de vue partielle peut énormément ajouter à la mémoire et au temps de votre formulaire (qui est déjà assez gros), cela est exacerbé lorsque vous utilisez le décorateur de scripts sur des éléments plutôt que sur le formulaire entier!

2

Je devais passer un code html indiquant un statut de score au fichier viewscript.phtml. J'ai trouvé un moyen plus simple que de le passer avec le décorateur, c'est-à-dire en passant la valeur de l'action du contrôleur comme si vous la passiez au script normal de zend view. par exemple:

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

Et là vous pouvez passer n'importe quel code rendu html .. Je suppose que cela fonctionnerait pour les icônes ..

Mohannad

+0

Je trouve la réponse à cette question il y a environ trois jours. Vous m'aidez beaucoup! Merci! Je suis mauvais anglais, donc désolé. –