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

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

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

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

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

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

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

14 Comments

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

      1. вообще это практически единственное место, кроме хабры вы там тоже постили где я нашел как это делать за это большое спасибо!

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

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

    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. Андрей, вышли на мыло, пожалуйста.
    Или выложи файл в этой теме, если возможно, – меньше отвлекать будут.
    Спасибо

    1. Да не вопрос. Ссылка на архив в статье. Удачи в кодинге, Роман!

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

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

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

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

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

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

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

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

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

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

Leave a Reply to Андрей Токарчук Cancel reply