Создал тему на основе zen, всё по мануалу.В итоге zen и дочерняя тема aviko включены. "Rebuild theme registry on every page" галка стоит в теме aviko, в zen - нет.
Переделал форму с помощью следующего кода в templates.php:
<?phpfunction aviko_form_alter(&$form, &$form_state, $form_id) {
if($form_id=='webform_client_form_14'){
function aviko_button($variables) {
$element = $variables['element'];
$element['#attributes']['type'] = 'image';
$element['#attributes']['src'] = '/sites/all/themes/aviko/images/button-form.jpg';
$element['#attributes']['value'] = 'Отправить';
element_set_attributes($element, array('id', 'name', 'value'));
$element['#attributes']['class'][] = 'form-' . $element['#button_type'];
if (!empty($element['#attributes']['disabled'])) {
$element['#attributes']['class'][] = 'form-button-disabled';
}
return '<input' . drupal_attributes($element['#attributes']) . ' />';
}
}
}?>
Форма альтерится и всё ОК.
Далее убрал галку "Rebuild theme registry on every page", сбросил кэш - форма перестала альтериться.
Выключил в админке тему zen, осталась включенной только тема aviko, сбросил кэш - форма нормально альтерится.
Вопрос.
- Что происходит? Почему с родительской темой не работает, а одна работает?
- Меня смущает этот код. Правильно ли я меняю форму?
- Есть ли у кого хорошие ссылки на мануалы по темизации форм?
Спасибо.
Комментарии
Что ещё заметил. Если перейти на страницу со списком модулей и сбросить кэш, то нужная форма перестаёт альтериться, но если если сбросить кэш находясь на странице, где форма расположена, то форма замечательно альтерится, но все стандартные кнопки submit исчезают вообще:) Абсолютно везде. Даже залогиниться нельзя.
По отзывам есть хорошее видео от лулабот Advanced Theming For Drupal. Я еще не смотрел, но думаю там есть ответы.
Спасибо за наводку:)
Напивку.
Меня смущает function aviko_button($variables) внутри хука _form_alter и все лишь для того, чтобы сменить надпись и картинку плюсануть.
Я делал проще (элементы массива $form).
По поводу «хорошие ссылки на мануалы по темизации форм» - Drupal.org и API.Drupal.org. Поиск по документации в Form API, - где то там отдельная подшивка по-моему была.
Спасибо за помощь. С картинкой определился, вставляю её с помощью функции:
<?php function aviko_form_alter(&$form, &$form_state, $form_id) {
if($form_id=='webform_client_form_14'){
$form['actions']['submit']['#type'] = 'image_button';
$form['actions']['submit']['#src'] = '/sites/all/themes/aviko/images/button-form.jpg';
}
}
?>
Всё замечательно- картинка отображается нормально и не пропадает. Но почему-то форма не обрабатывается webform. Проверки она проходит и если что не так заполнено, выдаёт соответствующее сообщение, но когда всё правильно заполнено, ничего не отправляет на почту.
Если функцию модификации закоментить, то всё обрабатывается нормально.
Есть идеи?
Решил проблему. Я наткнулся на баг webform и для его обхода нужно добавить ещё один непустой параметр value, а также задать имя name:
<?php
function aviko_form_alter(&$form, &$form_state, $form_id) {
if($form_id=='webform_client_form_14'){
$form['actions']['submit']['#type'] = 'image_button';
$form['actions']['submit']['#src'] = '/sites/all/themes/aviko/images/button-form.jpg';
$form['actions']['submit']['#value'] = 'Отправить';
$form['actions']['submit']['#name'] = 'op';
}
}
?>
Всем спасибо за помощь.