2010-01-25 12 views
5

Tengo un formulario que se extiende desde Zend_Form. Estoy poniendo el formulario en un decorador ViewScript así:zend_form Decodificador/argumentos de paso de ViewScript

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

me gustaría pasar una variable a este ViewScript pero no estoy seguro de cómo esto podría hacerse.

Dado que el parcial se representa como Zend_View (permitiendo $ this-> app_store_icon para el renderizado), parece que debería haber una forma de pasar las variables a representar. Intenté lo siguiente, pero fue en vano.

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

Se agradecerá cualquier ayuda sobre cómo hacer esto.

gracias

Respuesta

10

Ésta es un poco complicado, me llevó combate una media hora de averiguarlo, pero se puede hacer :)

El punto es, que estás pasando las opciones para el decorador ViewScript y no al elemento. Añadiendo la opción:

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

o una serie de opciones:

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

Conseguir que en el parcial, test.phtml:

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

En el primer caso, con una opción pasó será $option['foo'] y en el segundo será $option[0]['foo']

H TH :)

+0

Personalmente, encontré que el segundo método que proporcionó es más eficaz que el primero. Gracias :) – jjmu15

2

Hay otro par de posibles maneras de lograr añadiendo un icono dentro de un formulario, que creo que usted debe considerar,

Uno sería añadir su tipo de elemento, y añadir un decorador personalizado para el ícono (hago esto para agregar simple? íconos para ayuda siguiente, o buscadores de archivos para formar elementos). Este es un asunto bastante simple de hacer.

El otro sería simplemente agregar un decorador HtmlTag a su elemento, al que puede especificar los atributos como src como opciones.

Estas dos soluciones en realidad vienen con otro beneficio oculto en la parte superior de hacer las cosas más simples de manejar, que también eliminan el uso del ayudante de vista parcial, que se utiliza una vez por cada decorador ViewScript en uso.

El asistente de vista parcial puede aumentar enormemente la memoria y el tiempo de su formulario (que ya es bastante grande), ¡esto se agrava cuando usa el decorador de viewscript en lugar de todo el formulario!

2

Necesitaba pasar un código html que indica un estado de puntaje al archivo viewscript.phtml. Encontré una manera más simple que pasarla junto con el decorador, que es pasando el valor de la acción del controlador como si lo estuviera pasando al script de vista zend normal. e.g:

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

Y allí puede pasar cualquier código renderizado en html .. Supongo que funcionaría para los iconos ..

Mohannad

+0

encuentro la respuesta a esta pregunta hace unos tres días. ¡Me ayudas mucho! Gracias! Soy mal inglés, lo siento mucho. –

Cuestiones relacionadas