Здравствуйте!
Есть такая проблема.
В своём модуле создаю форму след. образом:
$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;
}
код генерации формы соответственно:
$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;
}
хэндлеры
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 отлично работает. Всю голову сломал, гугл ничем помочь не смог(
Может кто знает, в чем проблема? Буду премного благодарен за любые идеи.
Комментарии
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; В конце добавить...)
нет, не нужно. Дак ладно бы если и нужно, но туда выполнение скрипта вообще не приходит. я и вачдоги пробовал там писать и просто print var_dump() в паре с print $engine->die();(чтобы вылетела ошибка и выполнение остановилось). выполнение скрипта туда вообще не приходит...
только сейчас заметил что в сгенерированной форме нет ни одного hidden поля. т.е. ни form_build_id, ни form_token ни form_id и пр. копаю дальше. если кто знает откуда ноги ростут - подскажите пожалуйста)
блин...) в файле шаблона mymodule_form.tpl.php
форма рендерилась след. образом:
print drupal_render($form['fields']);
print drupal_render($form['controls']);
я забыл туда дописать
посыпаю голову пеплом) 6 часов дебага из-за элементарной невнимательности...
как пометить пост решенным?