[РЕШЕНО]Темизация формы-странное поведение

Главные вкладки

Аватар пользователя razz razz 22 февраля 2012 в 15:15

Создал тему на основе 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, сбросил кэш - форма нормально альтерится.

Вопрос.

  1. Что происходит? Почему с родительской темой не работает, а одна работает?
  2. Меня смущает этот код. Правильно ли я меняю форму?
  3. Есть ли у кого хорошие ссылки на мануалы по темизации форм?

Спасибо.

Комментарии

Аватар пользователя razz razz 22 февраля 2012 в 15:34

Что ещё заметил. Если перейти на страницу со списком модулей и сбросить кэш, то нужная форма перестаёт альтериться, но если если сбросить кэш находясь на странице, где форма расположена, то форма замечательно альтерится, но все стандартные кнопки submit исчезают вообще:) Абсолютно везде. Даже залогиниться нельзя.

Аватар пользователя Lotar Lotar 22 февраля 2012 в 15:35

По отзывам есть хорошее видео от лулабот Advanced Theming For Drupal. Я еще не смотрел, но думаю там есть ответы.

Аватар пользователя Alexei91 Alexei91 22 февраля 2012 в 17:11

Меня смущает function aviko_button($variables) внутри хука _form_alter и все лишь для того, чтобы сменить надпись и картинку плюсануть.

Я делал проще (элементы массива $form).

По поводу «хорошие ссылки на мануалы по темизации форм» - Drupal.org и API.Drupal.org. Поиск по документации в Form API, - где то там отдельная подшивка по-моему была.

Аватар пользователя razz razz 26 февраля 2012 в 17:45

Спасибо за помощь. С картинкой определился, вставляю её с помощью функции:

<?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. Проверки она проходит и если что не так заполнено, выдаёт соответствующее сообщение, но когда всё правильно заполнено, ничего не отправляет на почту.
Если функцию модификации закоментить, то всё обрабатывается нормально.
Есть идеи?

Аватар пользователя razz razz 27 февраля 2012 в 3:45

Решил проблему. Я наткнулся на баг 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';
  }
}
?>

Всем спасибо за помощь.