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.
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:
$element = new ZendX_JQuery_Form_Element_DatePicker( 'dp1', array('jQueryParams' => 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:
$form->setDecorators(array( 'FormElements', array('AccordionContainer', array( 'id' => 'tabContainer', 'style' => 'width: 600px;', 'jQueryParams' => array( 'alwaysOpen' => false, 'animated' => "easeslide" ), )), 'Form' ));
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
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:
Example 2.5. 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
:
$form = new ZendX_JQuery_Form(); $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:
$subForm1 = new ZendX_JQuery_Form(); $subForm1->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:
// Add Element Date Picker $elem = new ZendX_JQuery_Form_Element_DatePicker( "datePicker1", array("label" => "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:
$form->addSubForm($subForm1, 'subform1'); $form->addSubForm($subForm2, 'subform2'); $formString = $form->render($view);
Example 2.6. 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.
// Create new jQuery Form $form = new ZendX_JQuery_Form(); $form->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);