Since W3C published its HTML5 specs in January 2008 many browsers have started their implementation of the improved XML structure and its new attributes. But what does this mean and how can we as developers benefit from all this on a form level? This talk is about implementing HTML5 specific tags in your forms created with Zend_Form.
New features HTML5 for forms and validation
First of all to clarify the meaning of all these new goodies, we first look at what’s available. HTML4 had a few different input elements that could be added to your form : text, password, hidden, checkboxes etc. HTML5 brings even more types that can be added to your tag. For instance:- url
- number
- range
- Date pickers (date, month, week, time, datetime, datetime-local)
- search
- color
Besides the new input-types, HTML5 also provides some other tags that are interessing when dealing with our forms:
- datalist
- keygen
- output
“Currently, the browser support for this element is not good enough to be a useful security standard.”
The last element that is new is the output element, which well does nothing except that it is reserved for output. It’s just a container for different types of output, like calculations or script output.
That’s about it on the introduction to HTML5 and forms. Let’s proceed to the awesome part!
Applying HTML5 to your Zend_Form
(Note: all code can be found on GitHub)Basically all that we need is an extended Zend_Form_Element_Text and some view helpers that do the rendering. In this case I’ve used Glitch as the namespace for the classes.
An example:
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 datalist element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Datalist extends Zend_Form_Element_Multi{ /** * Viewhelper to be used * * @var string */ public $helper = 'formDatalist';}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 email element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Keygen extends Zend_Form_Element{ /** * Viewhelper to be used * * @var string */ public $helper = 'formKeygen';}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 output element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Output extends Zend_Form_Element{ /** * Viewhelper to be used * * @var string */ public $helper = 'formOutput';}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 text based elements * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text extends Zend_Form_Element_Text{ /**#@+ * Constants that are used for types of elements * * @var string */ const DEFAULT_TYPE = 'text'; const FIELD_EMAIL = 'email'; const FIELD_EMAIL_ADDRESS = 'emailaddress'; const FIELD_URL = 'url'; const FIELD_NUMBER = 'number'; const FIELD_RANGE = 'range'; const FIELD_DATE = 'date'; const FIELD_MONTH = 'month'; const FIELD_WEEK = 'week'; const FIELD_TIME = 'time'; const FIELD_DATE_TIME = 'datetime'; const FIELD_DATE_TIME_LOCAL = 'datetime-local'; const FIELD_SEARCH = 'search'; const FIELD_COLOR = 'color'; /**#@-*/ /** * Mapping of key => value pairs for the elements * * @var array */ protected static $_mapping = array( self::FIELD_EMAIL => 'email', self::FIELD_EMAIL_ADDRESS => 'email', self::FIELD_URL => 'url', self::FIELD_NUMBER => 'number', self::FIELD_RANGE => 'range', self::FIELD_DATE => 'date', self::FIELD_MONTH => 'month', self::FIELD_WEEK => 'week', self::FIELD_TIME => 'time', self::FIELD_DATE_TIME => 'datetime', self::FIELD_DATE_TIME_LOCAL => 'datetime-local', self::FIELD_SEARCH => 'search', self::FIELD_COLOR => 'color', ); /** * Check if the validators should be auto loaded * * @var bool */ private $_autoloadValidators = true; /** * Check if the filters should be auto loaded * * @var bool */ private $_autoloadFilters = true; /** * Return the mapping for elements * * @return array */ public static function getTypes() { return self::$_mapping; } /** * Constructor that takes into account the type given, if given * Proxies its parent constructor to provide rest of functionality * * @param $spec * @param $options * @uses Zend_Form_Element */ public function __construct($spec, $options = null) { if ($this->_isHtml5() && !isset($options['type'])) { $options['type'] = $this->_getType($spec); } parent::__construct($spec, $options); } /** * Flag if the the validators should be autoloaded * * @param bool $flag * @return Glitch_Form_Element_Text Provides a fluent interface */ public function setAutoloadValidators($flag) { $this->_autoloadValidators = (bool) $flag; return $this; } /** * Flag if the the validators should be autoloaded * * @return bool */ public function isAutoloadValidators() { return $this->_autoloadValidators; } /** * Flag if the the filters should be autoloaded * * @param bool $flag * @return Glitch_Form_Element_Text Provides a fluent interface */ public function setAutoloadFilters($flag) { $this->_autoloadFilters = (bool) $flag; return $this; } /** * Flag if the the validators should be autoloaded * * @return bool */ public function isAutoloadFilters() { return $this->_autoloadFilters; } /** * Check if the doctype is HTML5 * * @return bool */ protected function _isHtml5() { return $this->getView()->getHelper('doctype')->isHtml5(); } /** * Check if the given type is specified in the mapping and use it if it's available * Else return the constant DEFAULT_TYPE value * * @param $spec * @return string */ private function _getType($spec) { if (array_key_exists(strtolower($spec), self::$_mapping)) { return self::$_mapping[$spec]; } return self::DEFAULT_TYPE; }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 date element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Date extends Glitch_Form_Element_Text{}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 date time element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_DateTime extends Glitch_Form_Element_Text{}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 date time with local awareness element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_DateTimeLocal extends Glitch_Form_Element_Text{}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 email element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Email extends Glitch_Form_Element_Text{ /** * Initialize additional element options * * @return Glitch_Form_Element_Text_Email */ public function init() { if ($this->isAutoloadValidators()) { $this->addValidator('EmailAddress'); } return $this; }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 month element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Month extends Glitch_Form_Element_Text{ public function init() { if ($this->isAutoloadValidators()) { //@todo: base month numbers on Zend_Locale $this->addValidator('Between', false, array('min' => 1, 'max' => 52)); } }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 number element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Number extends Glitch_Form_Element_Text{ /** * Initialize additional element options * * @return Glitch_Form_Element_Text_Email */ public function init() { if ($this->isAutoloadFilters()) { $this->addFilter('Digits'); } if ($this->isAutoloadValidators()) { $this->addValidator('Digits'); $validatorOpts = array_filter(array( 'min' => $this->getAttrib('min'), 'max' => $this->getAttrib('max'), )); $validator = null; if (2 === count($validatorOpts)) { $validator = 'Between'; } else if (isset($validatorOpts['min'])) { $validator = 'GreaterThan'; } else if (isset($validatorOpts['max'])) { $validator = 'LessThan'; } if (null !== $validator) { $this->addValidator($validator, false, $validatorOpts); } } return $this; }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 range element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Range extends Glitch_Form_Element_Text_Number{}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 search element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Search extends Glitch_Form_Element_Text{}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 time element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Time extends Glitch_Form_Element_Text{}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_Form * @subpackage Element * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * Base class for HTML5 color element * * @category Glitch * @package Glitch_Form * @subpackage Element */class Glitch_Form_Element_Text_Color extends Glitch_Form_Element_Text{}
Now let’s take a crack at a view helper for the new types (yes, just 1 view helper!)
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_View * @subpackage Helper * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * View helper for generating a HTML5 datalist * * @category Glitch * @package Glitch_View * @subpackage Helper */class Glitch_View_Helper_FormDatalist extends Zend_View_Helper_FormSelect{ /** * Generates 'select' list of options. * * @access public * * @param string|array $name If a string, the element name. If an * array, all other parameters are ignored, and the array elements * are extracted in place of added parameters. * * @param mixed $value The option value to mark as 'selected'; if an * array, will mark all values in the array as 'selected' (used for * multiple-select elements). * * @param array|string $attribs Attributes added to the 'select' tag. * * @param array $options An array of key-value pairs where the array * key is the radio value, and the array value is the radio text. * * @param string $listsep When disabled, use this list separator string * between list values. * * @return string The select tag and options XHTML. */ public function formDatalist($name, $value = null, $attribs = null, $options = null, $listsep = "\n") { $info = $this->_getInfo($name, $value, $attribs, $options, $listsep); extract($info); // name, id, value, attribs, options, listsep, disable // force $value to array so we can compare multiple values to multiple // options; also ensure it's a string for comparison purposes. $value = array_map('strval', (array) $value); // Build the surrounding select element first. $xhtml = '. $this->view->escape($name) . '" />'; $xhtml .= ' . ' name="' . $this->view->escape($name) . '"' . ' id="' . $this->view->escape($id) . '"' . $this->_htmlAttribs($attribs) . ">\n "; // build the list of options $list = array(); $translator = $this->getTranslator(); foreach ((array) $options as $opt_value => $opt_label) { if (is_array($opt_label)) { $opt_disable = ''; if (is_array($disable) && in_array($opt_value, $disable)) { $opt_disable = ' disabled="disabled"'; } if (null !== $translator) { $opt_value = $translator->translate($opt_value); } $list[] = ' . $opt_disable . ' label="' . $this->view->escape($opt_value) .'">'; foreach ($opt_label as $val => $lab) { $list[] = $this->_build($val, $lab, $value, $disable); } $list[] = ''; } else { $list[] = $this->_build($opt_value, $opt_label, $value, $disable); } } // add the options to the xhtml and close the select $xhtml .= implode("\n ", $list) . "\n"; return $xhtml; }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_View * @subpackage Helper * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * View helper for generating a HTML5 keygen * * @category Glitch * @package Glitch_View * @subpackage Helper */class Glitch_View_Helper_FormKeygen extends Zend_View_Helper_FormText{ /** * Generates a 'keygen' element. * * @access public * * @param string|array $name If a string, the element name. If an * array, all other parameters are ignored, and the array elements * are used in place of added parameters. * * @param mixed $value The element value. * * @param array $attribs Attributes for the element tag. * * @return string The element XHTML. */ public function formKeygen($name, $value = null, $attribs = null) { $info = $this->_getInfo($name, $value, $attribs); extract($info); // name, value, attribs, options, listsep, disable // build the element $disabled = ''; if ($disable) { // disabled $disabled = ' disabled="disabled"'; } // XHTML or HTML end tag? $endTag = ' />'; if (($this->view instanceof Zend_View_Abstract) && !$this->view->doctype()->isXhtml()) { $endTag= '>'; } unset($attribs['type']); $xhtml = ' . ' name="' . $this->view->escape($name) . '"' . ' id="' . $this->view->escape($id) . '"' . $disabled . $this->_htmlAttribs($attribs) . $endTag; return $xhtml; }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_View * @subpackage Helper * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * View helper for generating a HTML5 output element * * @category Glitch * @package Glitch_View * @subpackage Helper */class Glitch_View_Helper_FormOutput extends Zend_View_Helper_FormElement{ /** * Generates a 'output' element. * * @access public * * @param string|array $name If a string, the element name. If an * array, all other parameters are ignored, and the array elements * are used in place of added parameters. * * @param mixed $value The element value. * * @param array $attribs Attributes for the element tag. * * @return string The element XHTML. */ public function formOutput($name, $value = null, $attribs = null) { $info = $this->_getInfo($name, $value, $attribs); extract($info); // name, value, attribs, options, listsep, disable // XHTML or HTML end tag? $endTag = ' />'; if (($this->view instanceof Zend_View_Abstract) && !$this->view->doctype()->isXhtml()) { $endTag= '>'; } $xhtml = ' . ' name="' . $this->view->escape($name) . '"' . ' id="' . $this->view->escape($id) . '"' . $this->_htmlAttribs($attribs) . $endTag; return $xhtml; }}
/** * Glitch * * Copyright (c) 2010, Enrise BV (www.enrise.com). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of Enrise nor the names of his contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * @category Glitch * @package Glitch_View * @subpackage Helper * @author Enrise * @copyright 2010, Enrise * @license http://www.opensource.org/licenses/bsd-license.php * @version $Id: $ *//** * View helper for generating a HTML5 datalist * * @category Glitch * @package Glitch_View * @subpackage Helper */class Glitch_View_Helper_FormText extends Zend_View_Helper_FormText{ /** * Generates a 'text' element. * * @access public * * @param string|array $name If a string, the element name. If an * array, all other parameters are ignored, and the array elements * are used in place of added parameters. * * @param mixed $value The element value. * * @param array $attribs Attributes for the element tag. * * @return string The element XHTML. */ public function formText($name, $value = null, $attribs = null) { $info = $this->_getInfo($name, $value, $attribs); extract($info); // name, value, attribs, options, listsep, disable // build the element $disabled = ''; if ($disable) { // disabled $disabled = ' disabled="disabled"'; } // XHTML or HTML end tag? $endTag = ' />'; if (($this->view instanceof Zend_View_Abstract) && !$this->view->doctype()->isXhtml()) { $endTag= '>'; } $type = 'text'; if ($this->view->doctype()->isHtml5() && isset($attribs['type']) && in_array($attribs['type'], Glitch_Form_Element_Text::getTypes())) { $type = $attribs['type']; unset($attribs['type']); } $xhtml = '. $type . '" ' . ' name="' . $this->view->escape($name) . '"' . ' id="' . $this->view->escape($id) . '"' . ' value="' . $this->view->escape($value) . '"' . $disabled . $this->_htmlAttribs($attribs) . $endTag; return $xhtml; }}
class Application_Model_Form_Html5 extends Zend_Form{ public function init() { $email = new Glitch_Form_Element_Text_Email('email'); $email->setLabel('Email'); $url = new Glitch_Form_Element_Text_Url('url'); $url->setLabel('Url'); $number = new Glitch_Form_Element_Text_Number('number', array( 'min' => 2, 'step' => 2, 'label' => 'Number', )); $range = new Glitch_Form_Element_Text_Range('range', array( 'min' => 5, 'max' => 100, 'step' => 5, 'autoloadValidators' => false, 'autoloadFilters' => false, 'label' => 'Range', )); $date = new Glitch_Form_Element_Text_Date('date'); $date->setLabel('Date'); $month = new Glitch_Form_Element_Text_Month('month'); $month->setLabel('Month'); $week = new Glitch_Form_Element_Text_Week('week'); $week->setLabel('Week'); $time = new Glitch_Form_Element_Text_Time('time'); $time->setLabel('Time'); $dateTime = new Glitch_Form_Element_Text_DateTime('datetime'); $dateTime->setLabel('DateTime'); $dateTimeLocal = new Glitch_Form_Element_Text_DateTimeLocal('datetime-local'); $dateTimeLocal->setLabel('DateTimeLocal'); $search = new Glitch_Form_Element_Text_Search('search'); $search->setLabel('Search'); $color = new Glitch_Form_Element_Text_Color('color'); $color->setLabel('Color'); $opts = array( 'foo' => 'bar', 'baz' => 'bat', ); $datalist = new Glitch_Form_Element_Datalist('datalist'); $datalist->setLabel('Datalist') ->setMultiOptions($opts); $output = new Glitch_Form_Element_Output('output'); $output->setLabel('Output')->setAttrib('onforminput', 'resCalc()'); $keygen = new Glitch_Form_Element_Keygen('keygen'); $keygen->setAttrib('keytype', 'rsa'); $password = new Zend_Form_Element_Password('password'); $password->setLabel('Password'); $submit = new Zend_Form_Element_Submit('submit'); $submit->setValue('submit'); $elements = array($email, $url, $number, $range, $date, $month, $week, $time, $dateTime, $dateTimeLocal, $search, $color, $output, $datalist, $submit ); $this->addElements($elements); }}
As you can see, nothing special going on. With the small exception of the range and number fields where we have provided specs for the attributes and more important, specs for our server sided validation. For the range element I’ve disabled the automated filtering and validation with the keys ‘autoloadValidators’ and ‘autoloadValidators’ set to false.
(Note the onforminput attribute on the output element, there is code for that in the view layer)
The datalist, output and keygen elements do require some more code as they rely on their own new view helpers which renders the right tags but this is nothing you should be worried about as it all included in the download package.
So now that we have our HTML5 form filled with elements and just 1 step away from yes, RESULT! Paste this in your view
echo $this->form;$this->headScript()->captureStart();?>function resCalc(){ numA=document.getElementById("range").value; numB=document.getElementById("number").value; document.getElementById("output").value=Number(numA)+Number(numB);}$this->headScript()->captureEnd();?>
Now to see the new form in all its glory I recommend Opera for viewing the beauty of your newly generated elements and take it for a test run. (Opera has the best support for the new input types)
(Reminder: there is client sided validation but that does not take away that you still are responsible for the data that comes in! Read: write your own validation chain.)
Now let’s see what happens when we don’t want the (still experimental) HTML5 elements. Just replace this code in your application.ini:
resources.view.doctype = "HTML5"
withresources.view.doctype = "XHTML1_STRICT"
Now refresh your page and see how everything just falls back to input elements with the attribute text instead of the funky HTML5 attributes.
Conclusion
One of the great joys (for me at least) of working with Zend and specific Zend_Form and Zend_Form_Element is that it so extendible!With a few classes of your own you can create almost any kind of element you want, it’s all up to your imagination.
I hope that you will agree that we extend to support the future ;)
All code can be found on GitHub
curtsy: David Papadogiannakis
No comments:
Post a Comment