Подозреваю, что вопрос очень простой, я просто что-то очевидное упустила - но не могу найти
Есть функция, ккоторая при переходе по некоему адресу делает то, что мне надо (проверено - работает, если ввести этот URL просто в адресной строке). Я знаю, как получить нужный адрес по данным, введенным в форме. Вопрос: как дальше (в функции по кнопке) сказать Drupal'у "а теперь иди по этому URL"? Есть какая-нибудь функция типа goto - или что?
Комментарии
API создано только для избранных?
drupal_goto()
Если редирект нужен после обработки формы, то в $form_state из hook_submit() установите свойство #redirect
О, спасибо! Я даже помнила, что где-то что-то такое видела, но почему-то не нашла :-(. На ночь глядя глаз замыленный
Во, нашла где видела. Даже проще можно - просто вернуть нужный путь через return из обработчика submit.
если нужно перейти после обработки формы, то $form['#redirect'] = URL
Как-то у меня ничего не работает - чего-то я сильно не понимаю. Попытаюсь сформулировать, чего именно:
во-первых, я не знаю, где именно должна задать этот самый '#redirect'? Пробовала задать в обработчике submit - не помогает. А задать в другом месте я не могу, потому что получаю URL в результате обработки.
Но, может быть, я вообще не попадаю в свой обработчик? Его, вроде бы, нужно задавать в свойстве #submit - но я опять-таки не знаю, где именно. Попытка указать его в функции ИмяФормы, где задаются поля и прочие кнопочки, не удалась - Drupal ругается. В разных других модулях люди это все задают в обработчиках alter - так что же, я должна задавать alter для своей собственной формы? В любом случае, в книжке написано, что если свойство #submit не указано, Drupal просто ищет функцию вида ИмяФормы_submit. Однако, не работает.
У меня не такая старая книжка, Вандюк и Вестгейт, 2008 года. В аргументах функций submit там нет никаких $form_state, есть $form_values. Простейший пример выглядит так: а) функция имяФормы, где указаны поля, б) обработчик nodeapi, где указано, куда и когда эту форму вставить, в) обработчик submit, про который написано буквально следующее: "Что-то делаем, потом отправляем пользователя, например, на узел 3: return 'node/3'; Если ничего не вернем, останемся на той же странице". Я все так и сделала - даже URL для проверки указала статический, закомментировав всю собственно обработку - ноль эмоций!
Что я делаю не так?
Код в студию, проще ошибки исправить, чем на все вопросы отвечать
Код чего, обработчика submit? Там уже ничего не осталось, кроме
$Url = 'libretto/tab/356/357';
$form_values['#redirect'] = $Url;
//return $Url;
Закомментирован альтернативный вариант - ни так, ни так, ни $form['#redirect'], ни $form_state['#redirect'] - никак не работает.
код формы + hook_submit()
Код формы:
<?phpfunction tab_libretto_addform($node) {
$list_options = array(
'357'=>'Лепко',
'358'=>'Пол'
);
$form['tab_lib'] = array(
'#type' => 'fieldset',
'#title' => t('Формирование табличного вывода')
);
$form['tab_lib']['nid'] = array(
'#type' => 'value',
'#value' => $node->nid
);
$form['tab_lib']['translations'] = array(
'#type' => 'select',
'#title' => 'Доступные варианты',
'#default_value' => '0',
'#options' => $list_options,
'#multiple' => TRUE,
'#description' => 'Выберите один или несколько вариантов для вывода в дополнительных столбцах'
);
$form['tab_lib']['submit'] = array(
'#type' => 'submit',
'#value' => t('Сформировать табличку')
);
/*
$form['#submit'] = array(
'tab_libretto_addform_submit' => array()
)*/
return $form;
}
?>
$list_options здесь тестовый, в принципе он из базы должен браться. Насчет правильности обработки результатов выбора я тоже не уверена, но даже статический путь не передается:
$nid = $form_values['nid'];
$current_values[$form_values['translations']] = array();
$cols = '';
foreach ($current_values as $choice) {
$cols .= ((strlen($cols)) ? '-' : '').$choice;
}
if (strlen($cols)) $Url = 'libretto/tab/'.$nid.'/'.$cols;
else $Url = 'libretto/tab/'.$nid;
$Url = 'libretto/tab/356/357';
$form_values['#redirect'] = $Url;
//return $Url;
}
(Как-то у меня со вставкой кода криво получилось )