Духовность™
Продвинутый новичок
DomDocument, рисовалка форм + покритикуйте
Когда я начал писать приложения, использующие большое количество полей, мне очень не нравилось работать с HTML формами "вручную". Т.е. что бы в шаблоне после неудачного POST запроса отобразить данные приходилось писать что то вроде:
(образец 2004 года)
ну и т.д. Я думаю, идея ясна.
Для контроля и автоматизации написания HTML форм я на удивление очень быстро написал библиотеку для построения форм на базе DomDocument. Это позволило
- не заботиться о различных опечатках
- не заботиться о преобразовании "плохих" символов в мнемоники HTML
- создать ОО-интерфейс и попытаться реализовать наработку в стиле JavaScript DOM
Библиотека состояла из 2 частей - сам код рисовалок форм и хэлпер. Хелпер нужен был для того, что бы спрятать код инициализации и присвоения элементам форм аттрибутов, создать специфические методы. Наглядный пример:
Реализация метода хелпера создания текстового поля:
в шаблоне это выглядело бы так:
Реализация метода хелпера создания Select-списка:
и создания тега option:
в шаблоне это выглядит так:
На данный момент меня беспокоит быстродействия - стоит ли использовать для этого DomDocument? Мне как-то сказали, что в контексте этой задачи он лишний и тяжелый. У меня домашнем пк данный пример генерится 0.02 сек, а на сервере 0.007. В принципе, реализацию без изменения абстракции можно сделать, но как-то пока не хочется.
Вот. Что скажите. Развивать или нет эту библиотеку?
Код сырой библиотеки с примером: скачать
Работающий пример кода по ссылке выше: смотреть
Когда я начал писать приложения, использующие большое количество полей, мне очень не нравилось работать с HTML формами "вручную". Т.е. что бы в шаблоне после неудачного POST запроса отобразить данные приходилось писать что то вроде:
PHP:
<select name="sort">
<option value="audio"<?=@$_GET["sort"] == "audio" ? " selected" : ""?>>Аудиозапись
<option value="video"<?=@$_GET["sort"] == "video" ? " selected" : ""?>>Видеозапись
<option value="dvd"<?=@$_GET["sort"] == "dvd" ? " selected" : ""?>>DVD-видеозапись
<option value="book"<?=@$_GET["sort"] == "book" ? " selected" : ""?>>Книги
<option value="data"<?=@$_GET["sort"] == "data" ? " selected" : ""?>>Data-диск
<option value=""<?=empty($_GET["sort"]) ? " selected" : ""?>>все
</select>
PHP:
<input type="text" value="<?=htmlspecialchars($var)?>" name="field">
Для контроля и автоматизации написания HTML форм я на удивление очень быстро написал библиотеку для построения форм на базе DomDocument. Это позволило
- не заботиться о различных опечатках
- не заботиться о преобразовании "плохих" символов в мнемоники HTML
- создать ОО-интерфейс и попытаться реализовать наработку в стиле JavaScript DOM
Библиотека состояла из 2 частей - сам код рисовалок форм и хэлпер. Хелпер нужен был для того, что бы спрятать код инициализации и присвоения элементам форм аттрибутов, создать специфические методы. Наглядный пример:
Реализация метода хелпера создания текстового поля:
PHP:
/**
* Возвращает объект Html_Element_Input типа text.
*
* @param string $name имя элемента
* @param string|int $value значение
* @param array дополнительные необязательные параметры
* @return object
*/
public function inputText($name, $value, $params=array())
{
$object = new Html_Element_Input('text');
$object->name = $name;
$object->value = $value;
$object->setData($params);
return $object;
}
PHP:
...<td>
<?=$helper->inputText('user[user_login]',
$user_login,
array('maxlength'=>255, 'class'=>'textSmall')
)->getHtml()?></td>...
PHP:
/**
* Возвращает объект Html_Element_Select.
*
* @param string $name имя элемента
* @param string|int $checked_value значение сравнения - если $value и $checked_value равны,
то checkbox is checked.
* @param array дополнительные необязательные параметры
* @return object
*/
public function inputSelect($name, $checked_value=null, $params=array())
{
$object = new Html_Element_Select();
$object->name = $name;
$object->setCheckedValue($checked_value);
$object->setData($params);
return $object;
}
PHP:
/**
* Возвращает объект Html_Element_Option.
*
* @param string $value значение value тега option
* @param string $text текстовой узел-значение тега option
* @param array дополнительные необязательные параметры
* @return object
*/
public function inputOption($value, $text=null, $params=array())
{
$object = new Html_Element_Option();
$object->value = $value;
$object->setText($text);
$object->setData($params);
return $object;
}
PHP:
... <td><?
$select = $helper->inputSelect('user[user_group]', $user_group);
$select->addOption( $helper->inputOption(0, 'выберите значение') );
foreach ($groups as $group):
$select->addOption( $helper->inputOption($group['id'], $group['group_name']) );
endforeach;
echo $select->getHtml();
?>...
На данный момент меня беспокоит быстродействия - стоит ли использовать для этого DomDocument? Мне как-то сказали, что в контексте этой задачи он лишний и тяжелый. У меня домашнем пк данный пример генерится 0.02 сек, а на сервере 0.007. В принципе, реализацию без изменения абстракции можно сделать, но как-то пока не хочется.
Вот. Что скажите. Развивать или нет эту библиотеку?
Код сырой библиотеки с примером: скачать
Работающий пример кода по ссылке выше: смотреть
