Произвольный html-код в Zend_Form
Возникла сегодня в процессе работы над одним проектом такая задача. Но нигде не смог найти решение.
Можно обрамить форму с помощью Zend_Form_Decorator_HtmlTag, а вот просто вставить код нельзя.
Zend_Form_Decorator_HtmlTag при создании получает переменную tag, например td, и выдает примерно следующее:
1 |
... |
А если убрать закрывающийся тэг, а из первого убрать треугольные скобки?
Мысля пошла…
И я разработал Zend_Form_Decorator_HtmlCode (cкачать можно тут).
Теперь в Zend_Form_Element мы можем добавить наш декоратор.
1 2 3 4 5 6 |
$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
Ссылка битая не кинетесь по мылу своим декаратором?
Да не вопрос, сейчас кину.
вообще это практически единственное место, кроме хабры вы там тоже постили где я нашел как это делать за это большое спасибо!
Пожалуйста, рад помочь!) Собственно тогда не было блога, постил туда. Дальше здесь буду все исследования выкладывать.
Воспользовался вашим декоратором в противовес тому про который я вам рассказывал
bSubTitle = new Zend_Form_Element_Text(‘b_sub_title’);
$bSubTitle->setDescription(‘some description’);
$bSubTitle->setDecorators(array(array(‘Description’, array(‘escape’ => false))));
$this->addElement($bSubTitle);
Это все таки сюда положу, это не устроило тем что надо делать дополнительные движения, десприптион в таком виде оборачивается в – у меня самого в этой форме были хинты и я долго ловил ошибку…
Так что вас способ абсолютно правильный еще раз спасибо
Андрей, вышли на мыло, пожалуйста.
Или выложи файл в этой теме, если возможно, – меньше отвлекать будут.
Спасибо
Да не вопрос. Ссылка на архив в статье. Удачи в кодинге, Роман!
Можно поподробнее, как вы добавили в форму декоратор?
В классе формы:
$this->getElement(‘name’)->addDecorator($decoratorObj);
Спасибо за быстрый ответ, не ожидал даже! = )
А обязательно декоратор связывать с каким нибудь элементом? Просто я хочу вывести обыкновенный рисунок в форме и ни как не могу его расположить посередине…
Если только поэлементно вывести в виде, но этого делать не хочется. = (
Затем пробовал вывести через Zend_From_Element_Image, но рисунок становится кликабельным! = (
Или эту кликабельность можно как-то отключить?
Ну я тут иногда бываю 😉
Насчёт элемента – cделай свой элемент, например ZendExtra_Form_Element_Image extends Zend_Form_Element_Image и в нём уже сделать всё, что душе угодно)
А на счет Декораторов, они все же в обязательном порядке должны быть связанными с элементами?
Да, я вот ща как раз думаю написать image элемент.
Хотя наверное можно вывести через:
$this->setDecorators(array(
‘FormElements’,
array(‘HtmlTag’,array(‘tag’=>’img’,’placement’=>’prepend’,’src’=>’#’)),
));
Только вот проблема, не могу его передвинуть туда, куда нужно.. = (
Используй setOrder, Люк.
Спасибо, что отозвались и вкратце объяснили. Мне дали пищу для размышления и направление куда рыть.. = )
Я все же сделал проще:
Написал свой App_Form_Element_Html и хелпер небольшой App_Helper_Html.
Через Елемент я могу передать любой код/html.
Удачи Вам.
P.s. Не вижу конец первой строки, из за того что надпись Comments от формы, где пишут комменты, сползла на рабочую часть… = (