Zend Decorators - Удалить поле идентификатора для DT Wrapper - PullRequest
1 голос
/ 03 августа 2010

У меня есть две формы, и они имеют несколько идентификаторов, так как два поля ввода называются 'title'.

Zend генерирует мне хороший вывод, подобный этому:

<dl class="zend-form">
  <dt id="title-label">
    <label for="form1-title" class="required">Description</label>
  </dt>
  <dd id="title-element">
    <input name="form1[title]" id="form1-title" value="..." type="text">
  </dd>
</dl>

Теперь проблема в том,что элементы dt и dd названы неверно (должно быть в форме form-title-lable, поскольку это подформа).

Я также попытался изменить декораторы элементов:

$this->addElements( ... );
$this->setElementDecorators(array(
        'ViewHelper',
        'Errors',
        array(array('data' => 'HtmlTag'),array( 'tag' => 'dd', 'class' => 'element' )),
        array(array('data' => 'Label'),array( 'tag' => 'dt', class=> 'label' ))
  ));

Однако результат оказался не таким, как ожидалось.

Метка была добавлена ​​к моей кнопке отправки, и идентификаторы элементов dt все еще были там.

Как удалить атрибуты id?


Правка - Объявление элемента:

    $titel = new Zend_Form_Element_Text('title');
    $titel->setLabel( "Title" )
          ->addValidator('NotEmpty', true)
          ->addValidator('stringLength',true, array(0, 255 ))
          ->setRequired(true)
          ->addFilter("Alnum", array(true))
          ->addFilter('StringTrim');

    $this->addElement($titel);

Ответы [ 2 ]

1 голос
/ 18 августа 2010

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

Но, если вы хотите удалить идентификатор из элемента с помощью декоратора DtDdWrapper, вы можете сделать что-то вроде этого.

class Form_Foo extends Zend_Form_SubForm
{
    public function init()
    {

        $title = new Zend_Form_Element_Text('foo_title');
        $title->setLabel('Title');
        $title->removeDecorator('DtDdWrapper');
        $title->addDecorator(new Decorator_Foo());      
        $this->addElement($title);
    }
}

class Decorator_Foo extends Zend_Form_Decorator_DtDdWrapper
{
    public function render($content)
    {
        return '<dt>&nbsp;</dt>' .
               '<dd>' . $content . '</dd>';
    }
}

Это должно дать вам элементы без тега ID.

0 голосов
/ 09 августа 2010

вы можете создать собственный декоратор Label, чтобы вы могли изменить функцию рендеринга по умолчанию.

class App_Form_Decorator_Label extends Zend_Form_Decorator_Label
{

    public function render()
    {
        // Insert here the render function of Zend_form_Decorator_Label but without the id decorator.
    }
}
...