Всем привет!
Задумка примерно такая: после разлогинивания пользователь должен перейти по определенной ссылке (может быть любой).
Реализация приходит на ум такая:
- пользователь переходит по ссылке вида /user/logout?goto=yandex.ru после чего нужно как-то переадресовать его... как - не ясно...
- пользователь переходит по ссылке вида /node/999?goto=yandex.ru, тут подключается Rules (просмотрена страница 999), и вот тут было бы круто разобрать URL, вытащить параметр goto и переадресовать пользователя.
Второй вариант кажется более правильным, осталось только понять, как разлогинить пользователя.
Заранее благодарю за помощь.
Комментарии
Попробуйте ?destination=, но я не уверен, что оно будет работать с внешними источниками
Спасибо, да, эта мысль была первой, как было замечено, не работает со сторонними ссылками.
Если вопрос задан правильно (т.е. судя по заголовку поста - именно "программно"), то лучше всего решить вопрос через свой menu callback (т.е из своего модуля).
В этом коллбеке user_logout() и затем drupal_goto()
Без своего модуля не обойтись? Хочется решить стандартными методами.
<?php
/**
* Implements hook_user_logout().
*/
function MYMODULE_user_logout() {
$to = variable_get('MYMODULE_external_url', '');
if ($to) {
session_destroy();
$options = array('external' => TRUE);
drupal_goto($to, $options);
}
}
?>
Если неохота морочиться с UI, то можно просто drush vset MYMODULE_external_url http://...
Ну или через drupal_get_query_parameters(); проверять что в goto
Вот честно скажу, очень сильно сомневаюсь, что сильно нетиповые задачи можно решать стандартными методами.
Точнее можно, но потом сам чёрт ногу сломит, что и как и почему отрабатывает.
"Стандартно" в данной ситуации было бы написать (если его нет) эвэнт(событие) для Rules "при разлогировании пользователя", и создать правило для этого события - редирект на нужный адрес.
Если надо разлогинить пользователя при определенном событии, то надо написать экшн (action) для Rules, который разлогинит пользователя.
в краце как-то так-)
В общем, решил следующим способом.
На ссылке выхода ссылка вида user/logout?destination=node/999?goto=yandex.ru
На странице node/999 с использованием PHP-фильтра написано следующее:
<?php
if (isset($_GET['goto'])) {
$url = $_GET['goto'];
if (preg_match("|[0-9a-z]*\.[0-9a-z]{2,8}|i", $url)) {
header('Location: http://'. $url);
}
else {
header('Location: http://site.com/home');
}
}
else {
header('Location: http://site.com/home');
}
?>
Ну то есть, если переадресовать некуда, пользователь переходит на главную страницу.
Ну вот как-то так.
(не знаю, стоит ли писать в заголовке [Решено], потому как решение не соответствует описанию задачи...)
Да и задача не совсем понятно сформулирована.
Критерий "правильности" не раскрыт.
Да и другое не понятно:
- зачем разлогинивать пользователя.
- откуда и почему берется параметр запроса "goto"
PS. И правильнее использовать не
<?php
header('Location: http://site.com/home')
?>
а drupal_goto : https://api.drupal.org/api/drupal/includes!common.inc/function/drupal_go...
Пользователь должен иметь возможность выйти из личного кабинета.
К личному кабинету пользователя "привязывается" его проект, поэтому после выхода он отправляется "к себе" на сайт.
Если тем что под рукой то rules справится, если хочется накодить то
drupal_goto('xxx');
Спасибо!