ZendX_JQuery Form Elements and Decorators All View Helpers are pressed into Zend_Form elements or decorators also. They can even be easily integrated into your already existing forms. To enable a Form for Zend_JQuery support you can use two ways: Init your form as $form = new ZendX_JQuery_Form(); or use the static method ZendX_JQuery::enableForm($form) to enable jQuery element support. General Elements and Decorator Usage Both elements and decorators of the Zend jQuery Form set can be initialized with the option key jQueryParams to set certain jQuery object related parameters. This jQueryParams array of options matches to the $params variable of the corresponding view helpers. For example: array('defaultDate' => '2007/10/10')) ); // would internally call to: $view->datePicker("dp1", "", array('defaultDate' => '2007/10/10'), array()); ]]> Additionally elements jQuery options can be customized by the following methods: setJQueryParam($name, $value): Set the jQuery option $name to the given value. setJQueryParams($params): Set key value pairs of jQuery options and merge them with the already set options. getJQueryParam($name): Return the jQuery option with the given name. getJQueryParams(): Return an array of all currently set jQuery options. Each jQuery related Decorator also owns a getJQueryParams() method, to set options you have to use the setDecorators(), addDecorator() or addDecorators() functionality of a form element and set the jQueryParams key as option: setDecorators(array( 'FormElements', array('AccordionContainer', array( 'id' => 'tabContainer', 'style' => 'width: 600px;', 'jQueryParams' => array( 'alwaysOpen' => false, 'animated' => "easeslide" ), )), 'Form' )); ]]> Form Elements The Zend Framework jQuery Extras Extension comes with the following Form Elements: ZendX_JQuery_Form_Element_AutoComplete: Proxy to AutoComplete View Helper ZendX_JQuery_Form_Element_ColorPicker: Proxy to ColorPicker View Helper ZendX_JQuery_Form_Element_DatePicker: Proxy to DatePicker View Helper ZendX_JQuery_Form_Element_Slider: Proxy to Slider View Helper ZendX_JQuery_Form_Element_Spinner: Proxy to Spinner View Helper jQuery Decorators: Beware the Marker Interface for UiWidgetElements By default all the jQuery Form elements use the ZendX_JQuery_Form_Decorator_UiWidgetElement decorator for rendering the jQuery element with its specific view helper. This decorator is inheritly different from the ViewHelper decorator that is used for most of the default form elements in Zend_Form. To ensure that rendering works correctly for jQuery form elements at least one decorator has to implement the ZendX_JQuery_Form_Decorator_UiWidgetElementMarker interface, which the default decorator does. If no marker interface is found an exception is thrown. Use the marker interface if you want to implement your own decorator for the jQuery form element specific rendering. Form Decorators The following Decorators come with the Zend Framework jQuery Extension: ZendX_JQuery_Form_Decorator_AccordionContainer: Proxy to AccordionContainer View Helper ZendX_JQuery_Form_Decorator_AccordionPane: Proxy to AccordionPane View Helper ZendX_JQuery_Form_Decorator_DialogContainer: Proxy to DialogContainer View Helper ZendX_JQuery_Form_Decorator_TabContainer: Proxy to TabContainer View Helper ZendX_JQuery_Form_Decorator_TabPane: Proxy to TabPane View Helper ZendX_JQuery_Form_Decorator_UiWidgetElement: Decorator to Display jQuery Form Elements Utilizing the Container elements is a bit more complicated, the following example builds a Form with 2 SubForms in a TabContainer: SubForms with TabContainer Decorator The following example makes use of all Form elements and wraps them into 2 subforms that are decorated with a tab container. First we build the basic ZendX_JQuery_Form: setAction('formdemo.php'); $form->setAttrib('id', 'mainForm'); $form->setAttrib('class', 'flora'); $form->setDecorators(array( 'FormElements', array('TabContainer', array( 'id' => 'tabContainer', 'style' => 'width: 600px;', )), 'Form', )); ]]> Setting the Form Id (in this case to 'mainForm') is an important step for the TabContainer. It is needed that the subforms can relate to the Container Id in a later form building stage. We now initialize two SubForms that will be decorated with the TabPane decorators: setDecorators(array( 'FormElements', array('HtmlTag', array('tag' => 'dl')), array('TabPane', array('jQueryParams' => array('containerId' => 'mainForm', 'title' => 'DatePicker and Slider'))) )); $subForm2 = new ZendX_JQuery_Form(); $subForm2->setDecorators(array( 'FormElements', array('HtmlTag', array('tag' => 'dl')), array('TabPane', array('jQueryParams' => array('containerId' => 'mainForm', 'title' => 'AutoComplete and Spinner'))) )); ]]> In this stage it is important that the 'containerId' option is set in each SubForm TabPane, or the subforms cannot relate back to the tab Container and would not be displayed. To enforce this setting, an exception of the type ZendX_JQuery_Exception is thrown if the option is not set. We can now add all the desired elements to the subforms: "Date Picker:") ); $elem->setJQueryParam('dateFormat', 'dd.mm.yy'); $subForm1->addElement($elem); // Add Element Spinner $elem = new ZendX_JQuery_Form_Element_Spinner( "spinner1", array('label' => 'Spinner:') ); $elem->setJQueryParams(array('min' => 0, 'max' => 1000, 'start' => 100)); $subForm1->addElement($elem); // Add Slider Element $elem = new ZendX_JQuery_Form_Element_Slider( "slider1", array('label' => 'Slider:') ); $elem->setJQueryParams(array('defaultValue' => '75')); $subForm2->addElement($elem); // Add Autocomplete Element $elem = new ZendX_JQuery_Form_Element_AutoComplete( "ac1", array('label' => 'Autocomplete:') ); $elem->setJQueryParams(array('source' => array('New York', 'Berlin', 'Bern', 'Boston'))); $subForm2->addElement($elem); // Submit Button $elem = new Zend_Form_Element_Submit("btn1", array('value' => 'Submit')); $subForm1->addElement($elem); ]]> Three additional lines are missing to put it all together and we have a jQuery animated form: addSubForm($subForm1, 'subform1'); $form->addSubForm($subForm2, 'subform2'); $formString = $form->render($view); ]]> Wrapping a Form into the Dialog Container The only use for the Dialog Container in Zend Form context is to wrap itself around a form and display it in a dialog. Its important to remember that the order of the decorators has to be different than in the Accordion and Tab Container examples. setAction('formdemo.php'); // Wrap the complete form inside a Dialog box $form->setDecorators(array( 'FormElements', 'Form', array('DialogContainer', array( 'id' => 'tabContainer', 'style' => 'width: 600px;', 'jQueryParams' => array( 'tabPosition' => 'top' ), )), )); // Add Element Spinner $elem = new ZendX_JQuery_Form_Element_Spinner("spinner1", array('label' => 'Spinner:', 'attribs' => array('class' => 'flora'))); $elem->setJQueryParams(array('min' => 0, 'max' => 1000, 'start' => 100)); $form->addElement($elem); ]]>