Генератор делать через фабрику нет особого смысла: код, который он генерирует, простой как валенок.Автор оригинала: AmdY
можно же генератор js сделать через фабрику, чтобы желающие прикрутили любой js фреймворк. а так конечно, нельзя завязываться на jQuery, не им единым.
$fsAuth = $form->addElement('fieldset')->setLabel('Auth credentials');
$fsAuth = $form->addFieldset('Auth credentials');
/**
* Append fieldset to the container
*
* @return HTML_QuickForm2_Container_Fieldset Added element
* @param string $label
*/
function addFieldset($label){
return $this->addElement('fieldset')->setlabel($label);
}
/**
* Append group to the container
*
* @return HTML_QuickForm2_Container_Group Added element
* @param string $name
*/
function addGroup($name=null){
return $this->addElement('group',$name);
}
/**
* Append <input type="button" /> to the container
*
* @param string $name
* @param string $value
* @return HTML_QuickForm2_Element_InputButton Added element
*/
function addInputButton($name, $value){
return $this->addElement('inputbutton',$name,array('value'=>$value));
}
/**
* Adds the given CSS class(es) to the element
*
* @param string|array Class name, multiple class names separated by
* whitespace, array of class names
* @return HTML_Common2
*/
public function addClass($class)
/**
* Adds the given CSS class(es) to the element (proxy-method for IDE autocomplite)
* @return HTML_QuickForm2_Container
*/
public function addClass($class){
return parent::addClass($class);
}
$form->addFieldset('Группа элементов')->addClass('class_name')->addInputButton('usr_name','Get User Name');
Тут есть 2 проблемы:Автор оригинала: Groove
Sad Spirit
есть несколько вопросов/предложений, задам их здесь, вдруг кому-то еще интересно:
============================================================
1) количество создаваемых элементов ограничено, может быть вместо одного абстрактного метода
сделать несколько конкретных методов, которые будут создавать и возвращать элемент конкретного типа, тем более что в параметры для них не надо будет передавать мусор, например для fieldset достаточно только $label передавать, ничего другого там нет, максимум возможно понадобится еще addClass().PHP:$fsAuth = $form->addElement('fieldset')->setLabel('Auth credentials');
Мне, честно говоря, эта идея не очень нравится... Вот интересно, а есть ли возможность задать что-то типа @return self, чтобы и phpDocumentor правильно понимал происходящее, и в IDE выдавались правильные подсказки? В принципе, неплохая идея для feature request'ов их авторам.2) Метод addClass($class) находится в HTML_Common2, что создает некоторые проблемы для автокомплита кода, так как возвращает HTML_Common2
может быть добавить проксирование методов для Node и/или Container, чтобы они возвращали нужный типPHP:/** * Adds the given CSS class(es) to the element * * @param string|array Class name, multiple class names separated by * whitespace, array of class names * @return HTML_Common2 */ public function addClass($class)
PHP:/** * Adds the given CSS class(es) to the element (proxy-method for IDE autocomplite) * @return HTML_QuickForm2_Container */ public function addClass($class){ return parent::addClass($class); }
QuickForm2 (как и предыдущая версия, собственно) позволяет задать несколько меток для элемента, надо массив передавать в setLabel() и шаблон доработать (не помню, есть ли это в примерах)3) Предлагаю еще добавить в Node методы для примера заполнения поля setExample/getExample
и, соответственно, в рендере, и тогда это покрывает практически 99% потребностей при создании формы
http://prntscr.com/xhza
На скриншоте:
жирным - label
красным - сообщение об ошибке
серым - комментарий
бледно-коричневым - пример заполнения поля, по клику вставляется значение в поле по аналогии с формой поиска Яндекс.
Это вопрос или утверждение?4) Не могу придумать как для какого-то конкретного поля сделать ajax-проверку, причем чтобы результат проверки учитывался HTML_QuickForm2: JS library
А с чего мне быть против? Наоборот, дополнения, сторонняя документация (если она, кнэшно, не очень от реальности далека) всячески приветствуется!Кстати, Алексей, если ты не против, то я, возможно, хотел бы оформить свои наработки в виде отдельного проекта QuickForm2 + jQuery в стиле документации, где пошагово рассказать что и как, для популяризации так сказать обоих фреймворков.
Туда как раз я добавляю интерфейсные штуки, которых судя по твоим словам не будет "искаропки" в QuickForm2 .
Ну это не такие уж и большие проблемы, по первому пункту скажу так: основные элементы уже созданы в виде отдельных классов, для них и предлагаю сделать обертки, в которые передавать только $name, остальное chain-методами.Автор оригинала: Sad Spirit
Тут есть 2 проблемы:
1) Количество типов элементов неограничено, потому что есть возможность создавать свои элементы
2) У Container'а уже висит метод __call() который (фактически) преобразует вызов addFieldset(...) в addElement('fieldset', ...)
вот кстати про разные параметры в конструкторах: не знаю, может быть это только у меня так получалось, но код добавления элемента в форму при помощи типового конструктора, в котором сделана попытка соединить функционал и потребности всех возможных наследников путем передачи хитрых массивов, индексы которых тоже надо держать в голове, - весьма пугает. А вот конкретные методы в цепочке - нет.Автор оригинала: Sad Spirit
Ну и кроме того, в начале разработки мы приняли решение, что конструкторы всех элементов будут единообразны, с тем же набором параметров. Разные параметры для конструкторов в старом QuickForm было напрочь невозможно запомнить.
$form->addSelect('name', array('label' => 'My select', 'options' => $options), array('style' => 'color:red'));
$form->addSelect('name')->setLabel('My select')->loadOptions($options);
Оч. хороший вариант, но пока буду проксировать, хотя и очень не хотелось влезать в код. Все ради своего быстродействия.Автор оригинала: Sad Spirit
Мне, честно говоря, эта идея не очень нравится... Вот интересно, а есть ли возможность задать что-то типа @return self, чтобы и phpDocumentor правильно понимал происходящее, и в IDE выдавались правильные подсказки? В принципе, неплохая идея для feature request'ов их авторам.![]()
А цель добавления нескольких меток для одного элемента?Автор оригинала: Sad Spirit
QuickForm2 (как и предыдущая версия, собственно) позволяет задать несколько меток для элемента, надо массив передавать в setLabel() и шаблон доработать (не помню, есть ли это в примерах)
Спасибо за идею, завтра сделаю. В голову не пришло даже, что во второй версии форм можно правило сделать ТОЛЬКО на клиенте, раньше по-моему было если указываешь клиента, то только тогда он выполняется на клиенте, а серверные проверки были не отключаемыми.Автор оригинала: Sad Spirit
Ну для учёта можно повесить доп. правило callback на элемент, работающее только на клиенте, а уже этот callback будет тупо возвращать результат AJAX проверки, когда будет вызвана проверка по onsubmit.
Ну, тогда думаю в течение месяца успею доделать демо-сайт с разными формами и вариантами использования.Автор оригинала: Sad Spirit
А с чего мне быть против? Наоборот, дополнения, сторонняя документация (если она, кнэшно, не очень от реальности далека) всячески приветствуется!
Вот и замечательно, возможно одна проблема будет решена сразу на "правильном" уровне, а не костылямиАвтор оригинала: Sad Spirit
Собственно, даже уже есть feature request про @return self: http://pear.php.net/bugs/bug.php?id=16223
Да, тут я согласен, сначала планировалось сделать одинаковые конструкторы, а потом --- уже в процессе --- стало понятно, что гораздо удобнее использовать fluent interfaces.Автор оригинала: Groove
вот кстати про разные параметры в конструкторах: не знаю, может быть это только у меня так получалось, но код добавления элемента в форму при помощи типового конструктора, в котором сделана попытка соединить функционал и потребности всех возможных наследников путем передачи хитрых массивов, индексы которых тоже надо держать в голове, - весьма пугает. А вот конкретные методы в цепочке - нет.
Поясню примером отсюда:
не удобно, возможно большое количество опечаток:
удобно, количество опечаток сведено до минимума:PHP:$form->addSelect('name', array('label' => 'My select', 'options' => $options), array('style' => 'color:red'));
PHP:$form->addSelect('name')->setLabel('My select')->loadOptions($options);
Ну так одну выводить жирным, вторую --- серым, третью --- бледно-коричневым...А цель добавления нескольких меток для одного элемента?
постучал, звук глухой.Автор оригинала: Groove
Sad Spirit
Алексей, если не трудно - постучи в аську 77227733 (или jabber:[email protected]),