Добрый день, почему-то не работает функция
function example_nameform_submit($form_id, $form_state) {
....
$form_state['redirect'] = 'node/3';
}
....
$form_state['redirect'] = 'node/3';
}
перенаправления не происходит, если вставить како-нибудь другое действие, например drupal_set_messege('бла бла бла') то оно выполняется, пробовал вставлять
пред
$form_state['redirect'] = 'node/3';
тоже не помогает!!!
Комментарии
и не должно.
Это свойство нужно определять во время формирования формы.
Если Вам нужно перенаправить форму во время сабмита то выполняйте просто
return 'куда мне надо'
сделал return drupal_goto (все равно в итоге она и используется) просто читал книгу про drupal 6 а там написано, что можно в сабмите определить, а переопределять можно при формировании формы, может я конечно не правильно понял...
а как сделать желательно без использования баз данных, что бы $form_state была доступна и на дугой странице, объявленной в этом же модуле? сделать ее глобальной или как?
Demimurych, Не сбивайте человека, он все делает правильно. Ваш совет примерним исключительно для пятого друпала.
Касательно проблемы, продемонстрируйте полный код модуля. Без эого невозможно сказать наверняка в чем проблема.
если вкратце
.....
затем
function formexample_page() {
return drupal_get_form('formexample_nameform');
}
function formexample_nameform($form_id, $form_state = NULL) {
$form_state['formexample']['spam_score'] = 90;
$form['user_name'] = array(
'#title' => t('имя'),
'#type' => 'textfield',
'#description' => t('Please enter your name.'),
'#required' => TRUE
);
$form['user_soname'] = array(
'#title' => t('фамилия'),
'#type' => 'textfield',
'#description' => 'Please enter your soname.',
'#required' => TRUE
);
$form['user_threname'] = array(
'#title' => t('очество'),
'#type' => 'textfield',
'#description' => 'Please enter your очество.',
'#required' => TRUE
);
$form['dateline'] = array(
'#title' => t('Дата рождения'),
'#type' => 'date',
'#description' => 'Укажите вашу дату рождения',
'#required' => TRUE,
'#default_value' => array (
'month' => format_date(time(), 'castom', 'n'),
'day' => format_date(time(), 'castom', 'j'),
'year' => format_date(time(), 'castom', 'Y'),
)
);
}
function formexample_nameform_submit($form_id, $form_state) {
drupal_set_message ('бла бла бла') //выполняется
unset ($form_state['storage']); //на всякий случай делаю хотя оно вроде и так пусто
$form_state['redirect'] = 'node/3'; //пере направления не происходит
}
функцию валидации не использовал, пробовал ее добавлять результата нет
А почему вы не хотите добавить в свою форму свойство #redirect и проверить, работает ли с ним? Хотя странно, что не работает редирект сейчас, ибо у вас всё правильно, на мой взгляд.
Ну, вестимо, сударь. Значение $form_state нужно передавать по ссылке:
В функции формы тоже неправильный заголовок, но он пока у вас не вызвал проблем
ну да ну да
не обратил внимание на тег друпал 6
Спасибо, помогло, а еще по API вопрос: если в hook_form_alter () в форму другого модуля добавить еще одно поле, то как потом это поле сохранить, имею ввиду как перехватить submint той формы?
И можно ли в своей функции как-то передать значение $form_state ?
за ворпосы сильно не пинайте, учу друпал вместе с PHP
в альтере прописать
Оно добавит ваш сабмиттер в очередь.
neochief, спасибо помогло,
теперь другая проблема, почему-то после сохранения формы в базу форма date в базу записывает 1 и все, как поправить?
'#title' => t('дата рождения'),
'#type' => 'date',
'#description' => 'дата рождения',
'#required' => TRUE,
'#weight' => 6,
);
Откуда мне знать? Вы думаете я за вас буду дебажить модуль?
Да нет, так не думаю, просто может туплю что массив создаю не так? все остальные поля нормально пишет, а какой тип столбца базы для даты использовать?
хе-х, для создания такблиц, нужно использовать SchemaAPI, который и обеспечит правильное создание типов столбцов. Вот здесь описаны типы данных, которые оно подставит, если будете делать все как положено.
я чесно говоря в ступоре, по какой-то причине drupal не делает редирект.
имеем свежую установку drupal 6.10
тестовый модуль test.module
<?php function test_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'page_node_form') {
$form['#submit'][] = 'test_node_redirect';
}
}
function
test_node_redirect($form, &$form_state) {$form_state['redirect'] = 'admin';
} ?>
все функции срабатывают, но редиректа не происходит...
что не так делаю?
Заранее благодарен!
<?php
$form['buttons']['submit']['#submit'][] = 'test_node_redirect';
?>
<?php
function test_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'page_node_form') {
$form['#redirect'] = 'admin';
}
}
?>
приведите полный код модуля. Это важно.
проблеме решена двумя постами выше.
полный код модуля:
<?php
function test_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'page_node_form') {
// $form['#submit'][] = 'test_node_redirect'; вот это не работает...
$form['buttons']['submit']['#submit'][] = 'test_node_redirect';
}
}
function
test_node_redirect($form, &$form_state) {$form_state['redirect'] = 'admin';
}
?>