Использование hook_form_FORM_ID_alter

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

Аватар пользователя denn.kulikoff denn.kulikoff 26 марта 2010 в 15:25

Здравствуйте!

Понадобилось мне изменить форму в модуле contact. Поменять порядок вывода полей и исключить поле "Тема".
Можно его не рендерить но хотябы сделать не обязательныи.

Вот что написал в template.php

<?php
function ztachel_theme() {
    return array(
        
'contact_mail_page' => array(
            
'arguments' => array('form' => NULL),
            ),
    );
}

function 

contact_form_contact_mail_page_alter(&$form, &$form_state) {
    
//$form['subject']['#required'] = 0;
    
    
    
$form['subject'] = array(
        
'#required' => FALSE
      
);
    
//$form['subject'] = '';
}

//contact_form_contact_mail_page_alter(&$form, &$form_state);    

function ztachel_contact_mail_page($form) {
$output '';

//echo '<xmp>';
//print_r($form);
//echo '</xmp>';

$output .= drupal_render($form['cid']);
$output .= drupal_render($form['message']);
$output .= drupal_render($form['name']);
$output .= drupal_render($form['mail']);
$output .= drupal_render($form['submit']);
$output .= drupal_render($form['form_build_id']);
$output .= drupal_render($form['form_token']);
$output .= drupal_render($form['form_id']);

return 

$output;
}
?>

В итоге, этот прием работает на странице, в которой я вывожу блок, в котором вызываю эту форму через php.

Но насамой странице /contact так и не отправляются сообщения. Пишет, что обязательное поле "Тема" не заполнено.

Что делать?

Комментарии

Аватар пользователя graker graker 26 марта 2010 в 15:29

Не рендерить форму через задний проход и написать нормально модуль. Хуки в модуле надо реализовывать.

Аватар пользователя graker graker 26 марта 2010 в 16:15

Не надо пихать хуки в темплейт, надо их пихать в модуль. Сделаете хук-форм-альтер в модуле - не надо будет рендерить каждый элемент формы отдельно. А так у вас работать ничего не будет.
Как создавать модули для Drupal 6.x