Типы элементов Zend HTML5 Form - PullRequest
2 голосов
/ 22 июня 2011

Есть ли простой способ вставить элементы формы HTML5 в форму Zend?createElement ( 'тел', 'телефон');просто не работает, потому что zend не поддерживает элементы формы html5, но кажется ... вы не можете переопределить атрибут type после того, как он был создан.

EG Мне нужен ввод type = "tel / email/ дата / номер "и т. д. в моей форме Zend.

Ответы [ 5 ]

3 голосов
/ 14 июля 2011

Benno,

Вот что я сделал, чтобы заставить Glitch работать: (Zend Framework 1.11)

в моей функции контроллера init ()

// someController extendsZend_Controller_Action

public function init(){
    $this->view->addHelperPath('Glitch/View/Helper', 'Glitch_View_Helper_');
}

Затем при создании элемента я просто перезаписываю тип с помощью attrib ('type', 'email')

public function getEmailField(){
     $element = new Zend_Form_Element_Text('email');
     $element->setLabel('Email');
     $element->setAttrib("type", "email");
     $element->setRequired();

     return $element;
}

Без установки помощников вида, ввод изменяетсяпечатать.

Спасибо!

3 голосов
/ 29 июня 2011

Не важно, я нашел эту статью: http://www.enrise.com/2010/12/html5-zend-framework-form-elements/. Мне просто нужно было скопировать его код в мою архитектуру MVC, и теперь он работает. За исключением того, что мне пришлось поместить $ this-> setAttrib ('type', 'number'), например, в Number.php, потому что он не добавляет опцию, если он не установлен в контроллере, что немного глупо, потому что я создавал новый Glitch_Form_Element_Text_Number или любой другой o_O.

0 голосов
/ 28 октября 2015

Поскольку решения «из коробки» не существует, я написал его сам и создал пакет для композитора для удобного распространения.Если вы используете composer, вы можете использовать его https://github.com/Alez/html5input

  1. введите в консоли composer требуется alez / html5input
  2. в вашем классе формы просто создайте экземпляр Html5Input_Element_AnyTypeс атрибутом "type" или установите для него атрибут "type" с тем, что вы хотите с php $formElement->setAttrib('type', 'email').И это единственное различие между ним и Zend_Form_Element_Text, вы можете рассматривать его как простой текстовый элемент.

Пример кода:

class My_Form extends Zend_Form
{
    public function init()
    {
        $email = new Html5Input_Element_AnyType('email', array(
            'type' => 'email',
        ));

        $this->addElement($email);
    }
}
0 голосов
/ 23 марта 2013

Вот что я сделал, чтобы найти элементы XML5.

Сначала я создал пользовательский элемент формы: library / Custom / Form / Element / Html5.php

    <?php

    /** Zend_Form_Element_Xhtml */
    require_once 'Zend/Form/Element/Xhtml.php';


    class Custom_Form_Element_Html5 extends Zend_Form_Element_Xhtml
    {
        public $helper = 'formHtml5';
    }

ЗатемЯ создал пользовательский помощник вида: library / Custom / View / Helper / FormHtml5.php

    <?php


    /**
    * Abstract class for extension
    */
    require_once 'Zend/View/Helper/FormElement.php';


    /**
    * Helper to generate an "Html5" element
    *
    */
    class Custom_View_Helper_FormHtml5 extends Zend_View_Helper_FormElement
    {

        public function formHtml5($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= '>';
            }

            $xhtml = '<input'
                    . ' type="' . (($attribs['type'])?($this->view->escape($attribs['type'])):'text') . '"'
                    . ' name="' . $this->view->escape($name) . '"'
                    . ' id="' . $this->view->escape($id) . '"'
                    . ' value="' . $this->view->escape($value) . '"'
                    . $disabled
                    . $this->_htmlAttribs($attribs)
                    . $endTag;

            return $xhtml;
        }
    }

Затем в форму я добавил следующее:

    class Application_Form_UserBasic extends Zend_Form
    {

        public function init()
        {
             // this will tell zf to look for custom helpers on your custom library
             $view = $this->getView();
             $view->addHelperPath(APPLICATION_PATH.'/../library/Custom/View/Helper/', 'Custom_View_Helper');

             /* Some other code */

             $email      = new Custom_Form_Element_Html5('email');
             $email->setAttribs(array( 'type' => 'email'));

             /* Your other elements*/

             $this->addElements(array(
                  $email, /* your other elements */
             ));
        }
    }

Не забудьте добавить эту строку вВаш файл application.ini, если вы этого еще не сделали:

    autoloaderNamespaces[] = "Custom_"

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 07 июля 2011

Я создал запись , которая показывает, как наилучшим образом использовать элементы формы Enrise HTML5, подтверждая тот факт, что вам необходимо указать тип документа HTML5.

...