не вызывается _submit и _validate для формы созданной через drupal_get_form[РЕШЕНО]

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

Аватар пользователя aleks_84 aleks_84 2 марта 2011 в 4:49

Здравствуйте!
Есть такая проблема.
В своём модуле создаю форму след. образом:

function mymodule_view($node, $teaser = FALSE, $page = FALSE) {
        $node = node_prepare($node, $teaser);
        $available_forms = db_fetch_object(db_query('SELECT available_forms FROM {mymodule_nodes} WHERE nid=%d', $node->nid));
        $available_forms = unserialize($available_forms->available_forms);
        $forms = array();
        $query = db_query('SELECT * FROM {mymodule_forms} WHERE machine_name IN ('.db_placeholders($available_forms, 'text').')', $available_forms);
        while ($form = db_fetch_array($query)) {
                $form['form_fields'] = unserialize($form['form_fields']);
                $forms[] = $form;
        }
        $node->forms = $forms;
        $output = drupal_get_form('mymodule_client_form', $node, $forms);
        $node->content['client_form'] = array(
                        '#value' => $output,
                        '#weight' => 1,
    );
  return $node;
}

код генерации формы соответственно:

function mymodule_client_form(&$form_state, $node, $forms) {
    $form['#node'] = $node;
    $form['#theme'] = 'mymodule_form';
    $form['#attributes'] = array('class' => 'mymodule-client-form');
    $form['#submit'] = array('mymodule_client_form_submit');
    $form['#validate'] = array('mymodule_client_form_validate');
       

//построение формы...
//...
//...
//...

    $form['controls']['submit'] = array(
            '#type'             => 'submit',
            '#value'            => t('Populate forms'),
            '#weight'           => $weight++,
    );
   
    return $form;
}

хэндлеры

function mymodule_client_form_validate($form, &$form_state) {
        drupal_set_message(t('VALIDATION'), 'status', true);   
}

function mymodule_client_form_submit($form, &$form_state) {    
        drupal_set_message(t('SUBMIT'), 'status', true);       
}

проблема в том, что не вызываются хэндлеры ни для валидации, ни для сабмита. страница просто перезагружается и всё. в POST заполненная форма уходит, там всё нормально.
пробовал не прописывать напрямую $form['#submit'] и $form['#validate'], т.к. они должны подхватываться автоматически, но тоже без эффекта.
Тот же номер в модуле webforms отлично работает. Всю голову сломал, гугл ничем помочь не смог(
Может кто знает, в чем проблема? Буду премного благодарен за любые идеи.

Комментарии

Аватар пользователя stddos stddos 2 марта 2011 в 13:59

function mymodule_client_form_validate($form, &$form_state) {
drupal_set_message(t('VALIDATION'), 'status', true);
}

function mymodule_client_form_submit($form, &$form_state) {
drupal_set_message(t('SUBMIT'), 'status', true);
}

В этих функциях по моему нужно возвращать $form, ( return $form; В конце добавить...)

Аватар пользователя aleks_84 aleks_84 2 марта 2011 в 15:56

нет, не нужно. Дак ладно бы если и нужно, но туда выполнение скрипта вообще не приходит. я и вачдоги пробовал там писать и просто print var_dump() в паре с print $engine->die();(чтобы вылетела ошибка и выполнение остановилось). выполнение скрипта туда вообще не приходит...

Аватар пользователя aleks_84 aleks_84 2 марта 2011 в 17:07

только сейчас заметил что в сгенерированной форме нет ни одного hidden поля. т.е. ни form_build_id, ни form_token ни form_id и пр. копаю дальше. если кто знает откуда ноги ростут - подскажите пожалуйста)

Аватар пользователя aleks_84 aleks_84 2 марта 2011 в 17:18

блин...) в файле шаблона mymodule_form.tpl.php
форма рендерилась след. образом:

print drupal_render($form['used_forms']);
print drupal_render($form['fields']);
print drupal_render($form['controls']);

я забыл туда дописать

посыпаю голову пеплом) 6 часов дебага из-за элементарной невнимательности...
как пометить пост решенным?