Я ломал голову над этим, пытаясь найти решение, искал вокруг что-то, что могло бы работать, но у меня не было шансов.
У меня есть «панель управления», где у пользователей есть список события они приняли участие, где они могут оценить / прокомментировать событие. Я в основном пользовательская форма комментария для узла, который не отображается на самой странице узла. Пользователь нажимает на значок на своей панели инструментов рядом с событием, которое он хочет прокомментировать, он попадает в форму, заполняет ее, и она возвращает их обратно на панель инструментов. Возврат - добавление параметров с помощью пользовательской функции отправки и использование функции перенаправления, чтобы гарантировать, что пользователь вернется к нужной вкладке на своей панели инструментов.
function custom_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'comment_node_event_form') {
$form['#submit'][] = 'customcomment_form_submit';
}
}
function customcomment_form_submit($form, &$form_state) {
if($form['#form_id']=='comment_node_event_form'){
$pos = strpos($_SERVER['HTTP_REFERER'], 'qt-dashboard');
if ($pos !== FALSE) {
$form_state['redirect'] = array(
'dashboard',
array(
'query' => array(
'qt-dashboard' => '2',
'qt-dashboard_event' => '2',
),));
}else{
$form_state['redirect'] = array(
'dashboard',
array(
'query' => array(
'qt-dashboard' => '2',
'qt-dashboard_event' => '1',
),));
}
}
}
Эта часть работает так, как следует и ожидаемо. Проблема заключается в том, что при сбое проверки формы она отправляет сообщение об ошибке формы комментария и форму для повторного заполнения на страницу узла, а не остается на месте.
Я обнаружил, что если я установил #action со ссылкой, где находится форма моего комментария, он отправит сообщение об ошибке на нужную страницу
$form['#action']='/rating_comment/'.$form['#node']->vid.'?destination=dashboard&qt-dashboard=2&qt-dashboard_event=2';
Но при этом прервется перенаправление, когда успешно отправляет форму, и он не принимает параметр в перенаправлении. Он в основном отправляет пользователя непосредственно на панель инструментов и удаляет параметр. Теперь может быть лучшее решение, чтобы проверка формы не оставалась на той же странице, и это в значительной степени то, что я ищу.
Спасибо