views:

583

answers:

2

I have a form that is extend from Zend_Form. I am placing the form into a ViewScript decorator like this:

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

I'd like to pass in a variable to this ViewScript but am not sure how this could be done.

Since the partial renders out as a Zend_View (allowing $this->app_store_icon for rendering), it seems like there should be a way to pass variables to be rendered. I tried the following but to no avail.

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

Any help on how to get this done would be appreciated.

thanks

+1  A: 

This one's a bit tricky, took me bout a half an hour to figure it out, but it can be done :)

The point is, that you're passing the options to the ViewScript decorator and not to the element. Adding the option:

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

or an array of options:

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

Getting that out in the partial, test.phtml:

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

In the first case, with one option passed it'll be $option['foo'] and in the second it'll be $option[0]['foo']

HTH :)

robertbasic
A: 

There is another couple of possible ways to achieve adding an icon inside a form, which I think you should consider,

One would be to add your own element type, and add a custom decorator for the icon (I do this to add simple ? icons for help next, or file browsers to form elements). This is a fairly simple affair to do.

The other would be to simply add a HtmlTag decorator to your element, to which you can specify the attributes such as src as options.

These two solutions actually come with another hidden benefit on top of making things simpler to manage, they also remove the usage of the partial view helper, which is used once for every viewscript decorator in use.

The partial view helper can immensely add to the memory and time overhead of your form (which is already fairly large by the way), this is exacerbated when you use the viewscript decorator on elements instead of on the whole form!

Bittarman