Произвольный html-код в Zend_Form

// Июнь 24th, 2010 // Zend Framework

Возникла сегодня в процессе работы над одним проектом такая задача. Но нигде не смог найти решение.
Можно обрамить форму с помощью Zend_Form_Decorator_HtmlTag, а вот просто вставить код нельзя.
Zend_Form_Decorator_HtmlTag при создании получает переменную tag, например td, и выдает примерно следующее:

...

А если убрать закрывающийся тэг, а из первого убрать треугольные скобки?
Мысля пошла…

И я разработал Zend_Form_Decorator_HtmlCode (cкачать можно тут).

Теперь в Zend_Form_Element мы можем добавить наш декоратор.

$code = 'Наш код';
$elementDecorators = array(
array('decorator' => array('br' => 'HtmlCode'), 'options' => array('tag' => $code,
'placement' => Zend_Form_Decorator_Abstract::APPEND)),
);
$this -> addDecorators($elementDecorators);

Теперь после элемента формы появится $code.

UPD:Скачать его можете тут: ZendExtra_Form_Decorator_HtmlCode

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


14 Responses to “Произвольный html-код в Zend_Form”

  1. craz:

    Ссылка битая не кинетесь по мылу своим декаратором?

  2. google.com Андрей Токарчук:

    Пожалуйста, рад помочь!) Собственно тогда не было блога, постил туда. Дальше здесь буду все исследования выкладывать.

  3. craz:

    Воспользовался вашим декоратором в противовес тому про который я вам рассказывал

    bSubTitle = new Zend_Form_Element_Text(‘b_sub_title’);
    $bSubTitle->setDescription(‘some description’);
    $bSubTitle->setDecorators(array(array(‘Description’, array(‘escape’ => false))));
    $this->addElement($bSubTitle);

    Это все таки сюда положу, это не устроило тем что надо делать дополнительные движения, десприптион в таком виде оборачивается в — у меня самого в этой форме были хинты и я долго ловил ошибку…
    Так что вас способ абсолютно правильный еще раз спасибо

  4. Андрей, вышли на мыло, пожалуйста.
    Или выложи файл в этой теме, если возможно, — меньше отвлекать будут.
    Спасибо

  5. Carfagen:

    Можно поподробнее, как вы добавили в форму декоратор?

    • google.com Андрей Токарчук:

      В классе формы:
      $this->getElement(‘name’)->addDecorator($decoratorObj);

      • Carfagen:

        Спасибо за быстрый ответ, не ожидал даже! = )

        А обязательно декоратор связывать с каким нибудь элементом? Просто я хочу вывести обыкновенный рисунок в форме и ни как не могу его расположить посередине…
        Если только поэлементно вывести в виде, но этого делать не хочется. = (
        Затем пробовал вывести через Zend_From_Element_Image, но рисунок становится кликабельным! = (
        Или эту кликабельность можно как-то отключить?

        • google.com Андрей Токарчук:

          Ну я тут иногда бываю 😉
          Насчёт элемента — cделай свой элемент, например ZendExtra_Form_Element_Image extends Zend_Form_Element_Image и в нём уже сделать всё, что душе угодно)

  6. Carfagen:

    А на счет Декораторов, они все же в обязательном порядке должны быть связанными с элементами?

    Да, я вот ща как раз думаю написать image элемент.
    Хотя наверное можно вывести через:
    $this->setDecorators(array(
    ‘FormElements’,
    array(‘HtmlTag’,array(‘tag’=>’img’,’placement’=>’prepend’,’src’=>’#’)),
    ));
    Только вот проблема, не могу его передвинуть туда, куда нужно.. = (

    • google.com Андрей Токарчук:

      Используй setOrder, Люк.

      • Carfagen:

        Спасибо, что отозвались и вкратце объяснили. Мне дали пищу для размышления и направление куда рыть.. = )

        Я все же сделал проще:
        Написал свой App_Form_Element_Html и хелпер небольшой App_Helper_Html.
        Через Елемент я могу передать любой код/html.
        Удачи Вам.

        P.s. Не вижу конец первой строки, из за того что надпись Comments от формы, где пишут комменты, сползла на рабочую часть… = (

Комментировать