Redirect to some page after the user submits a comment

Главные вкладки

Аватар пользователя sergey2att sergey2att 5 марта 2015 в 10:23

Уважаемое сообщество!

Возникла необходимость после создания комментария, перенаправлять пользователя на определенную станицу. Решение взял на примере: http://drupal.stackexchange.com/questions/72307/how-do-i-redirect-back-t....

Например, пользователь оставляет комментарий на странице site. ru/comment/reply/23?q=[nid]. После создания комментария его должно перенаправить на страницу site .ru/node/[nid]. Одако этого не происходит. Выдает что аргумент отсутствует.

Может кто сталкивался с подобной проблемой и может подсказать решение?

Испробованы решения:
- $nid = arg(3) - вариант не подходит;
- $nid = $_GET['q']; - говорит что нет аргумента
- request_uri(); - выдает ссылку без ?q=[nid]

Комментарии

Аватар пользователя t1mm1 t1mm1 5 марта 2015 в 12:54
function mymodule_form_comment_form_alter(&$form, &$form_state) {
  $nid = arg(2);
  $form_state['redirect'] = 'mymodule/' . $nid;
}

Есть подозрение, что у вас не отрабатывает вот этот кусок кода.
Я же правильно вас понимаю, что вы создали свой модуль, вставили этот код, переименовав название хука, потом его включили, сбросили кеш - и не работает?

Аватар пользователя sergey2att sergey2att 5 марта 2015 в 13:25

Создал свой модуль, вставил измененный код, на основе этого, сбросили кеш и не работает.

Если подставить статическое значение, например: $form_state['redirect'] = 'node/1';, то хук отрабатывает как надо. Значит проблема с получением аргумента.

Аргумент получаю так: $form_state['redirect'] = 'node/'.$_GET['q'];

Все это дело работает если я хочу перенаправить пользователя после создания ноды. Если же делать тоже самое для комментария - аргумент почему-то не передается.

Аватар пользователя t1mm1 t1mm1 5 марта 2015 в 14:37

А, стоп, стоп.

Есть замечательная функция

drupal_get_query_parameters()

которая позволит вам получить значение q после саммой ссылки. Хотя я бы не рекомендовал вам использовать q, так как эта переменная (название) служит для системных ссылок.

Далее вы через нее получите массив, в котором будет ваше значение.
Можете передавать nid или что-то другое (я вообще умудряюсь там пихать все - начиная от дат, заканчивая...).
Только добавьте check_plain для значения. Мало ли..

Аватар пользователя sergey2att sergey2att 5 марта 2015 в 16:47

Спасибо! Наконец заработало. Еще был небольшой косяк: функцию нужно было называть не function MYMODULE_custom_comment_submit_handler, а MYMODULE_custom_comment_form_submit.