Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: xFormer. Класс для генерации форм.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: php
Vinyl
Отправлено: 09 Мая, 2013 - 22:09:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Здравствуйте, коллеги.
Одним из самых нелюбимых мною дел в web является составление форм. Немного поискав класс для их генерации, я понял, что удобного для меня в природе ещё нет. Решил написать сам.

Встречайте, xFormer Радость :

Жирным будут выделены обязательные аргументы

setTabs (Отобразить)


setSpaces (Отобразить)


setXhtm (Отобразить)


formStart (Отобразить)


formEnd (Отобразить)


getText (Отобразить)


getHidden (Отобразить)


getTextarea (Отобразить)


getPassword (Отобразить)


getCheckbox (Отобразить)


getRadio (Отобразить)


getSelect (Отобразить)


getButton (Отобразить)


getReset (Отобразить)


getSubmit (Отобразить)


getFile (Отобразить)


Пример 1:

PHP:
скопировать код в буфер обмена
  1. $form = new xFormer();
  2. $form->setTabs(2);
  3. $form->setXhtml();
  4.  
  5. echo $form->formStart($_SERVER['REQUEST_URI'].'?go');
  6. echo $form->getText('text1');
  7. echo $form->getPassword('pwd1');
  8. echo $form->getTextarea('textarea1');
  9. echo $form->getSubmit('Сохранить','ok');
  10. echo $form->formEnd();

↓↓↓

CODE (html):
скопировать код в буфер обмена
  1.                 <form  action="/xFormer.php?go" method="POST" enctype="application/x-www-form-urlencoded" target="_self">
  2.                 <input type="text" name="text1" />
  3.                 <input type="password" name="pwd1" />
  4.                 <textarea name="textarea1"></textarea>
  5.                 <input type="submit" value="Сохранить" id="ok" />
  6.                 </form>


Пример 2:

PHP:
скопировать код в буфер обмена
  1. $p['s1']['name'] = 'Селект 1';
  2.                
  3. $p['s2']['name'] = 'Селект 2';
  4. $p['s2']['disabled'] = 1;
  5.  
  6. $p['s3']['name'] = 'Селект 3';
  7.  
  8. $p['s4']['name'] = 'Селект 4';
  9. $p['s4']['selected'] = 1;
  10.  
  11. $p['s5']['name'] = 'Селект 5';
  12.  
  13. $p['s6']['name'] = 'Селект 6';
  14.                
  15. $form = new xFormer();
  16. $form->setTabs(1);
  17.  
  18. echo $form->formStart($_SERVER['REQUEST_URI'].'?go');
  19. echo $form->getSelect('sel1',$p);
  20. echo $form->getSubmit('Сохранить','ok');
  21. echo $form->formEnd();

↓↓↓

CODE (html):
скопировать код в буфер обмена
  1.         <form  action="/xFormer.php?go" method="POST" enctype="application/x-www-form-urlencoded" target="_self">
  2.         <select name="sel1">
  3.                 <option value="s1">Селект 1</option>
  4.                 <option value="s2" disabled>Селект 2</option>
  5.                 <option value="s3">Селект 3</option>
  6.                 <option value="s4" selected>Селект 4</option>
  7.                 <option value="s5">Селект 5</option>
  8.                 <option value="s6">Селект 6</option>
  9.         </select>
  10.         <input type="submit" value="Сохранить" id="ok">
  11.         </form>



В общем, только сегодня его написал, в бою ещё не был. Кстати, всех с Великим Днем Победы! Всем мирного неба над головой!
Скачать файл: xFormer.php
Скачан раз: 80

(Отредактировано автором: 09 Мая, 2013 - 22:25:09)



-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
esterio
Отправлено: 10 Мая, 2013 - 09:04:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




с того чьо заметил - обичный вивод форм. меня же более интересует их обработка - проверка токена, рефера, капча например. также автоматическое разширение - календарь, плейсхолдеры, автокомплит. для админкы подойдет стандарный шаблон например. ну короч хотелось бы полного фарша
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Мая, 2013 - 09:05:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Vinyl пишет:
echo $form->
Ненене, так не пойдет. Никаких эхо (эчо), только буферизация!
И только в шаблоне, либо getGeneratedHTML() либо реализуй __toString(), тогда будет просто echo $form;
Мало ли где я захочу форму вывести, после того как в контроллере например её сформировал.
Ну и соответственно с таким подходом все геттеры переименовать в сеттеры.

Щас исходник гляну - откаменчу тоже.
(Добавление)
esterio пишет:
хотелось бы полного фарша
Тогда еще один типа совет - для желаемого esterio фарша добавить возможность прицеплять плагины.
Так например чем текстария не плагин?
Ну и далее..

Еще пока не забыл - очень важно, это декораторы.
Бывает из-за верстки нужно обернуть элемент например в див(-ы).
(Добавление)
Псмотрел исходник.
Да, а что, разве нельзя сделать красиво через DOMDocument (или что там еще есть)?
Я не осуждаю - я спрашиваю.
Конкатенация как-то не кошерно выглядит, оно полюбому быстрее будет генерить встроенными средствами нежели конкатенацией.
 
 Top
esterio
Отправлено: 10 Мая, 2013 - 09:21:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




думаю от использования DOMDocumrnt мы не получим существеного вииграша. лучше файл шаблона обгорнутый в ob_*
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Мая, 2013 - 09:25:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




esterio пишет:
не получим существеного вииграша

DeepVarvar пишет:
полюбому быстрее будет генерить встроенными средствами нежели конкатенацией
 
 Top
Vinyl
Отправлено: 10 Мая, 2013 - 09:51:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




esterio пишет:
с того чьо заметил - обичный вивод форм
Мне только это и нужно было. Для валидации существует множество различных решений.

DeepVarvar пишет:
Ненене, так не пойдет. Никаких эхо (эчо), только буферизация!
Я для примера использовал, дабы показать, что выводится. Мог конечно собрать все в переменную, потом echo {переменная}, только вот в примере не вижу смысла.

DeepVarvar пишет:
Мало ли где я захочу форму вывести, после того как в контроллере например её сформировал.
Дык пожалуйста, собирайте внутри контроллера форму в переменную, потом передавайте её в вид.

DeepVarvar пишет:
добавить возможность прицеплять плагины.
Мне не совсем понятно, что именно Вы имеете ввиду. Тут трактовать можно по-разному. То ли плагин к классу, то ли JS-плагин к textarea.

DeepVarvar пишет:
Так например чем текстария не плагин?
xFormer генерит textarea. Если нужно что-то кастомное добавить в атрибуты, есть параметр $string, если внутрь textarea, для этого есть $text. Или я Вас опять не понял?

DeepVarvar пишет:
Еще пока не забыл - очень важно, это декораторы.
Бывает из-за верстки нужно обернуть элемент например в див(-ы).
Ну в том же контроллере
PHP:
скопировать код в буфер обмена
  1. $content = '<div ... >'.$t=form->getText('text1').'</div>'


DeepVarvar пишет:
Да, а что, разве нельзя сделать красиво через DOMDocument (или что там еще есть)?
Я, признаться, никогда им не пользовался.

DeepVarvar пишет:
Конкатенация как-то не кошерно выглядит
Чего-то все последнее время на конкатенацию бочку катят)) Не знаю, по мне так норм. Хотя если Вы пишете, что DOMDocument будет быстрее работать, то это весомый аргумент, спасибо.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Мая, 2013 - 10:49:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Vinyl пишет:
Ну в том же контроллере
Это то какраз не верно, мы тут мух с котлетами попутаем сразу. Разделяли, разделяли (вид от логики) и тут на тебе - теги в контроллере..

И я имел виду что форма сама должна уметь хранить свое состояние.
Я не должен заботиться о том, что мне надо какую-то переменную заводить лишнюю для того, чтобы хранить состояние экземпляра формы в данной области видимости.
Может я её (форму) по ссылке захочу передать куда-то еще, чтобы забить еще тридцатью полями.
Не передавать же туда недозаконкатенированную строку формы?
А там, на новом месте создавать еще один экземпляр формы?


Так, если экземпляр будет хранить свое состояние, то:

1) Можно передать его куда угодно и дозабить там данными.
2) Не будет проблемы, сгенерили мы "шапку" формы или нет, надо ли нам закрывающий тег формы или нет - генерация строки только в самом конце, когда попросят.
3) Полная инкапсуляция данных в конкретном эккземпляре.
4) Можно добавить возможность "на лету" изменять установленные ранее значения опшнов, чекбоксов etc..
5) Никаких лишних внешних переменных-хранилищ для тех или иных промежуточных результатов.

А иначе это и не ООП по сути, или - ООП ради ООП, или как я раньше писал статьи для новичков с названием "ООП где-то рядом", где рассматривались лишь сами принципы описания классов и создания объектов, но не их применение, где почему так и зачем.
 
 Top
LIME
Отправлено: 10 Мая, 2013 - 10:50:30
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а чем http://pear.php.net/package/HTML_QuickForm2 не подходит?
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Мая, 2013 - 10:54:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DeepVarvar пишет:
прицеплять плагины
Я имел виду абсолютно кастомные поля.
Так например хидден-поле, а внешне, тот же календарь, который хотел esterio, или вот мне нужна ссылка для открытия нового окна с полем загрузки файла, где после успеха, в родительское окно возвращается в это хидден-поле строка с именем загруженного файла.
 
 Top
Vinyl
Отправлено: 10 Мая, 2013 - 11:03:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




LIME пишет:
а чем http://pear.php.net/package/HTML_QuickForm2 не подходит?
ИМХО, абсолютно не удобен, тяжеловат в плане изучения.

DeepVarvar, Вы абсолютно правы. Я сразу не понял, о чем Вы. Теперь как будет время, перепишу.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
LIME
Отправлено: 10 Мая, 2013 - 11:04:50
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




что там изучать??
достаточно пример посмотреть
 
 Top
Vinyl
Отправлено: 10 Мая, 2013 - 11:09:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




LIME пишет:
достаточно пример посмотреть
Смотрим пример:
PHP:
скопировать код в буфер обмена
  1. $form = new HTML_QuickForm2('tutorial');
  2.  
  3. // Set defaults for the form elements
  4. $form->addDataSource(new HTML_QuickForm2_DataSource_Array(array(
  5.     'name' => 'Joe User'
  6. )));
  7.  


Мне хватает new HTML_QuickForm2_DataSource_Array, передаваемого в качестве аргумента, чтобы отказаться от HTML_QuickForm2. Опять же, лично мне.


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 10 Мая, 2013 - 11:21:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)





Блин, крайне интересно посмотреть код, но вот скачивать лень Улыбка
Почему на гитхаб не положить?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 10 Мая, 2013 - 11:29:16
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




не очень понял чем это проще вместо накидать форму каким нибудь дримвьювером.

и как быть с отделением дизайна от кода?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
LIME
Отправлено: 10 Мая, 2013 - 11:29:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




бегло глянул
PHP:
скопировать код в буфер обмена
  1. $this->checkedTag = ' checked="checked"';
а если завтра еще какой-нибудь атрибут придумают...класс править будем?
предлагаю типа
только это все нафиг никому не надо без инкапсулированного обработчика
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB