Перенаправление комментариев узла Drupal при сбое проверки - PullRequest
0 голосов
/ 15 апреля 2020

Я ломал голову над этим, пытаясь найти решение, искал вокруг что-то, что могло бы работать, но у меня не было шансов.

У меня есть «панель управления», где у пользователей есть список события они приняли участие, где они могут оценить / прокомментировать событие. Я в основном пользовательская форма комментария для узла, который не отображается на самой странице узла. Пользователь нажимает на значок на своей панели инструментов рядом с событием, которое он хочет прокомментировать, он попадает в форму, заполняет ее, и она возвращает их обратно на панель инструментов. Возврат - добавление параметров с помощью пользовательской функции отправки и использование функции перенаправления, чтобы гарантировать, что пользователь вернется к нужной вкладке на своей панели инструментов.

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';

Но при этом прервется перенаправление, когда успешно отправляет форму, и он не принимает параметр в перенаправлении. Он в основном отправляет пользователя непосредственно на панель инструментов и удаляет параметр. Теперь может быть лучшее решение, чтобы проверка формы не оставалась на той же странице, и это в значительной степени то, что я ищу.

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2020

Похоже, этой формы нет в вашем модуле - и вы изменяете другой модуль. Теперь, когда в конце вызывается функция validate, вы можете проверить наличие ошибок и отменить обработку / перенаправление et c.

$ form_state ['no_redirect'] = FALSE:

Кроме того, вы можете использовать функцию ошибок для проверки ошибок и, если это так, отмены остальных. Это идет внутри метода проверки.

  if (form_get_errors()) { return FALSE ; }
  // .. Otherwise, process validation

Проверьте следующее

https://drupal.stackexchange.com/questions/170815/is-it-possible-to-stop-a-webform-form-during-submission

https://drupal.stackexchange.com/questions/5861/how-to-redirect-to-a-page-after-submitting-a-form

...