Всем привет!
Поговорим немного о темизации конкретной формы созданной с помощью модуля webform
Для одного интернет магазина была поставлена задача создать красивую форму подписки. В ней должны присутствовать поля "Имя" "E-mail" ну и кнопка "Подписаться"
Нарисовал я форму, верстальщик её сделал примерно так:
Вот перечень модулей которые я использовал для создания самой подписки и стандартной формы:
simplenews
webform
webform_simplenews
После установки и настройки этих модулей я создал форму подписки. Ясное дело выглядит она стандартно и не так как нам нужно.
Итак что бы узнать что нам с этой формой делать — нужно просмотреть(узнать) её id и массив(узнаем где и что там находится). Для этого воспользуемся модулями devel и devel_themer
Устанавливаем их. По devel_themer есть ссылка на скринкаст прямо на странице проекта, по этому как его юзать я рассказывать не буду.
С помощью devel_themer выделяем нужную форму и просмотрим её ID
Я навел просто на кнопку сабмитта и увидел что мне нужно
Далее открываю файл template.php в своей теме и начинаю манипулировать с выводом массива этой формы. В этом поможет нам модуль Devel.
Напишем такую штуковину для нашей формы:
garland замените названием вашей темы. Просто я пока жду вёрстку разношу весь функционал и темизирую формы непосредственно в теме garland, затем портирую на Zen
dsm($form);
return $form;
}
Сохраним, обновим кэш.
Эта конструкция выведет в поле message страницы массив формы:
Теперь согласно полученным данным и form API начинаем темизировать форму!
Найдем необходимые поля:
Кнопка сабмитта и необходимый тип для замены
Поле "Ваше имя"
Поле "E-mail"
Все поля найдены, можно приступать.
Для начала немного изменим то что мы написали в template.php касательно нашей формы
//Сюда запишем наши изменения
return drupal_render($form);
}
Теперь я приведу весь код с небольшими комментариями. Всё должно быть понятно исходя из просмотра массива формы.
function garland_webform_form_12($form){
// Изменяем тип кнопки на изображение, присваиваем класс и саму картинку
$form['actions']['submit']['#type'] = 'image_button';
$form['actions']['submit']['#src'] = drupal_get_path('theme', 'garland').'/images/sub-pod-button.jpg';
$form['actions']['submit']['#attributes']['class'] = 'podpis-button';
// Добавляем событие наведения на кнопку
$form['actions']['submit']['#attributes'] = array(
'onmouseover' => "this.src='/themes/garland/images/sub-pod-button-hover.jpg'",
'onmouseout' => "this.src='/themes/garland/images/sub-pod-button.jpg'",
);
// Отключаем лэйблы(заголовки полей)
unset($form['submitted']['vashe_imya']['#title']);
unset($form['submitted']['e_mail']['#title']);
// Присваиваем значения
$form['submitted']['vashe_imya']['#value'] = 'Ваше имя';
$form['submitted']['e_mail']['newsletter_email_address']['#value'] = 'E-mail';
// Делаем исчезающий текст в полях
$form['submitted']['vashe_imya']['#attributes'] = array(
'onBlur'=> "if (this.value.length == 0) {this.value='{$form['submitted']['vashe_imya']['#value']}'}",
'onFocus'=> "if (this.value== '{$form['submitted']['vashe_imya']['#value']}') {this.value=''}"
);
$form['submitted']['e_mail']['newsletter_email_address']['#attributes'] = array(
'onBlur'=> "if (this.value.length == 0) {this.value='{$form['submitted']['e_mail']['newsletter_email_address']['#value']}'}",
'onFocus'=> "if (this.value== '{$form['submitted']['e_mail']['newsletter_email_address']['#value']}') {this.value=''}"
);
return drupal_render($form);
}
Дальше всё решается с помощью CSS
garland замените названием вашей темы. Просто я пока жду вёрстку разношу весь функционал и темизирую формы непосредственно в теме garland, затем портирую на Zen
Надеюсь мой пост поможет начинающим и не очень усвоить азы темизации форм(в частности созданным модулем webform)
Спасибо!
Комментарии
Спасибо!!!
спасибо
Мазохисты какие-то. Поставить JQuery плагин религия не позволяет?
подробное решение в студию)
А зачем?
Я этот пост написал что бы люди могли на живом примере посмотреть и четко понять как с формами работат, а при чем тут JQuery к друпаловским формам я никак не пойму.
#
+
Полезно и доходчиво - спасибо , надеюсь продолжение будет