Класс по умолчанию для элементов формы - PullRequest
0 голосов
/ 23 марта 2012

У меня есть собственный класс формы, который расширяет базу Zend_Form и определяет декораторы для самой формы и элементов.

А теперь я застрял - как добавить какой-то определенный класс HTMLкаждый элемент ввода?

Единственное, о чем я мог подумать, это переопределить addElement(), но я открыт для лучших решений, если таковые имеются.

Ответы [ 4 ]

2 голосов
/ 23 марта 2012

просто другое решение:

class My_Form extends Zend_Form
{ 
    public function render(Zend_View_Interface $view = null) 
    { 
        foreach ($this->getElements() as $element) { 
            $element->setAttrib('class', 'default'); 
        }

        return parent::render($view); 
    }
}
1 голос
/ 23 марта 2012

Мне не нравятся решения, которые наследуют Zend_Form, поэтому я разработал другой способ сделать это.

<?php

abstract class Application_Style
{

    private $_object;


    function __construct ($object = null)
    {
        if (isset ($object))
        {
            $this->apply ($object);
        }
    }


    function apply ($object)
    {
        $this->setObject ($object);
        if ($this->filter ())
        {
            $this->onApply ();
        }

        return $object;
    }


    function __call ($method, $arguments)
    {
        return call_user_func_array (array (
            $this->getObject (),
            $method
        ), $arguments);
    }


    abstract protected function onApply ();


    protected function filter ()
    {
        return true;
    }


    function setObject ($_object)
    {
        $this->_object = $_object;
    }


    function getObject ()
    {
        return $this->_object;
    }
}




class Application_Style_ElementClass extends Application_Style
{


    function onApply ()
    {
        foreach ($this->getObject ()
            ->getElements () as $element)
        {
            $element->setOptions (array (
                'class' => 'test-class'
            ));
        }
    }


    function filter ()
    {
        return $this->getObject () instanceof Zend_Form;
    }
}


$form = new Zend_Form ();
$form->addElement ('text', 'name');
new Application_Style_ElementClass ($form);  // apply the class name
echo $form;

Таким образом, вы можете применить все стили, необходимые для любой формы, в любом порядке.

1 голос
/ 23 марта 2012

звучит так, как будто вы хотите автоматически назначить уникальный класс каждому элементу.

Расширяя ответ, данный b.b3rn4rd , попробуйте что-то вроде:

class My_Form extends Zend_Form
{ 
    public function render(Zend_View_Interface $view = null) 
    { 
        foreach ($this->getElements() as $element) { 
            //assign the class as some unique identifier that is part of the element
            //each element requires a unique name so it's a good place to start
            $element->setAttrib('class', $element->getName()); 
        }

        return parent::render($view); 
}

}

0 голосов
/ 23 марта 2012

Добавление атрибутов класса HTML к элементам выглядит так

$element->setAttrib('class', 'text'):
or directly 
$element->class = 'text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...