Сегодня начнём изучение темизации веб-форм в Drupal 7, напомню, что самым популярным при создании своих веб-форм является модуль webform. Как создать свою веб-форму вы можете почитать вот здесь, на этом я останавливаться не буду. В качестве примера я буду использовать стандартный шаблон Drupal – Bartik, и создам форму из нескольких полей (2х текстовых полей, 1го поля с электронной почтой и 1го поля с текстовой областью), в результате данная форма у меня выглядит вот так
И имеет следующие настройки
Теперь приступим к самой темизации. Например давайте разместим данную форму в таблицу, в первой строке которого у нас будут находится поля с «Именем» и «Фамилией», во второй строке разместим поле «E-mail», ну а в третьей строке выведем поле «Текст сообщения». Приступим, первое что нам необходимо – это узнать id нашей формы, в моём случае моя форма имеет #360, свой id вы можете увидеть в адресной строке браузера при создании формы, либо через Firebug. Теперь переходим в корень вашего шаблона и создаём файл с именем
webform-form-idвашейформы.tpl.php
в моём случае файл будет иметь имя
webform-form-360.tpl.php
и впишем первым делом в него вывод нашей таблицы
<table border="1"> <thead> <tr> <td> <h3>наша тестовая форма</h3> </td> </tr> </thead> <tbody> <tr> <td> </td> <td> </td> </tr> <tr> <td> </td> </tr> <tr> <td> </td> </tr> </tbody> </table>
И посмотрим на результат, не забудьте только про кодировку UTF-8 без BOM, и очистить кеш сайта, вот что в итоге у нас получается
Картина конечно не самая наглядная но тем не менее. Таблицу мы вывели, теперь осталось нам вывести лишь поля в каждую строчку таблицы. В webform поля выводятся из массива, как
<?php print drupal_render($form['submitted']);?>
Таким образом мы выведем все поля из данного массива, а нам же нужно каждое поле по отдельности, сложности с этим у вас не должно возникнуть, так как массив submitted является многомерным, и чтобы вытащить конкретное поле, нужно лишь дописать ключ данного поля и выглядеть запрос будет вот так
<?php print drupal_render($form['submitted']['ключ поля']);>
Ключом поля является машинное имя создаваемого поля, которое вы задаете при создании данного поля
В результате вывод поля «Имя» будет выглядеть, как
<?php print drupal_render($form['submitted']['imya']);?>
На странице это выглядит вот так
Теперь то же самое проделаем для всех остальных полей нашей формы, это вы сделаете самостоятельно, я лишь покажу как должно получиться у вас
и для красоты я добавил дополнительные столбцы в таблице, в результате мой код выглядит вот так
Как мы видим с поставленной задачей мы справились, осталось лишь вывести саму кнопку отправки формы, вывод производится как
<?php print drupal_render_children($form);?>
Выведем кнопку после таблицы, в результате конечный код моей формы выглядит так
Посмотрим результат,
Как мы видим, теперь у нас полноценная веб-форма, с полями и кнопкой отправки. Далее в уроках мы рассмотрим еще различные файлы модуля webform, которые упрощают стилизацию вывода практически каждого элемента формы, а пока на этом всё.
Комментарии (34)
Добрый день! Помоги плиз разобраться.. когда я вывожу код кнопки http://clip2net.com/s/5nXiuQ
То у меня выводится все форма... хотя я в коде указал только одно поле и кнопку http://clip2net.com/s/5nXj05
Интересно.. Админы сайт вообще посещают?
Или не знают ответы на вопросы??
Зачем тогда пост писать.
Не всегда есть возможность ответить сразу, хотя все коменты просматриваются. По вашему вопросу, так и должно быть, нельзя вытащить какое-то одно поле из формы и потом приписать к ней submit. Вам необходимо при темизации использовать все поля которые входят в форму, иначе она самостоятельно будет подгружать на страницу все те поля которые не указаны при темизации.
Внизу у каждого материала есть форма для отправки сообщений - создана модулем web-form! Она выходитcя на страницу в виде ссылки, с помощью модуля popup!
Как сделать, чтобы название материала подставлялось автоматически в web-форму?
Отличная статья, как всегда к месту
А как подменить системные классы форм или добавить к ним свои пользовательские классы?
через
Мне надо присвоить или подменить на странице формы входа классы кнопке войти и инпутам ввода логина и пароля. Покажите пожалуйста на примере как это все будет реализовано. Спасибо!
вот так:
Огромное благодарю!!!
Ваша статья бы решила почти все мои проблемы, но... Нихрена не выходит((( Просто с формой моей ничего не происходит. Не меняется. Кэш чистил.
Скажите пожалуйста, это нормально, что у меня id формы вот такого вида:
webform-client-form-4
Как тогда должен правильно называться файл? Может быть я его не в ту директорию кладу?
Заранее прошу прощения за тупость. Всю жизнь до этого пользовал жумлу. Решил вот потрогать друпал и пока ничерта не понимаю).
так в статье же написан шаблон, как должно строится название... В вашем случае название файла будет как
Большое спасибо за такую статью. А вот как можно поставить на кнопку цель из яндекс мертрики, вот такое вот (onclick="ya_hit('TARGET_NAME'); return true;)
??
примерно так:
Спасибо автору за замечательную статью!
Подскажите, пожалуйста, как вывести кнопку "отправить" по центру?
Здравствуйте. Все сделал, как описано в примере, форма вывелась на сайт, но есть одна проблема. Веб Форма обратной связи, которая изначально была на сайте, созданная через админку - не исчезла, а оказывается под созданной веб формой из данного примера. Объясните пожалуйста, как сделать, чтоб стандартная веб форма более не отображалась?
не понимаю о чем вы.
Я создал форму обратной связи через webform, она отображается в region-sidebar-second, делаю по вашему примеру все, создаю webform-form-3.tpl.php
Но получается так, что стандартно созданная форма остается на странице, а созданная webform-form-3.tpl.php - встает поверх стандартной. А как сделать чтоб отображалась только лишь созданная webform-form-3.tpl.php обратная связь?
скидывайте код вашего webform-form-3.tpl.php
у вас отсутствует
А как вставить код в комментарий?
И из-за этого стандартная форма остается а webform-form-3.tpl.php оказывается поверх?
первый раз, при рендере страницы у вас вызываются сами элементы формы, который вы указали в вашем webform-form-3.tpl.php, далее вызывается рендер формы, который вызывается по умолчанию, если он не указан явно в вашем файле.
Посмотрите, получается, что стандартный заголовок тоже присутствует, подскажите, как его убрать, чтоб только отображалась форма созданная через webform-form-3.tpl.php
http://gumanitarka.com/sites/all/themes/micro_zymphonies_theme/images/webform-form-3.jpg
hook_form_alter
Помогите, уважаемый!
После установки своего шаблона - форма перестала загружать файлы.
Пишет: Неустранимые ошибки. Размер загружаемого файла вероятно превысил максимально допустимый размер файла (1000 МБ), который поддерживает данный сервер.
После удаления шаблона - все работает.
Может надо как-то по другому написать вывод поля (тип поля "Файл")?
Сейчас так:
Как добавить атрибут к
Теги вырезаются.
* Как добавить атрибут к тегу form?
Сделал сам.
Здравствуйте подскажите пожалуйста можно ли присвоить классы форме входа на сайт с помощью шаблона типа юзер-логин.tpl.php, и как это сделать?
пролистала по поиску много всего и везде почти одно и тоже. у вас хоть разумно написано как это сделать через темплат.
Но мне нужен шаблон ибо страничка входа будет с большим объемом темизации и всяких плюшек..
шаблон под такую страничку я сделала - не могу понять как в шаблоне прописать форму по кашерному а не с фаербуга с уже со значениями
Если вам нужно добавить классы CSS для полей формы то используйте
Если же вам необходимо добавить разметку для полей формы, то вам необходимо зарегистрировать новый шаблон шаблон через hook_theme()
После чего вам необходимо создать файл внутри вашей темы
и в этом файле реализовать вашу разметку. Все поля формы будут находится в переменной $form, которую не забудьте пропустить через render()
Простите, не могли бы вы чуть подробнее описать второй вариант с разметкой. первый вариант работает но мне этого не достаточно, а вот со вторым вариантом мне не совсем понятно как делать разметку.
Если можно - короткий пример кода для разметки в шаблоне. Буду очень признательна.Спасибо