В любом случае, перенаправить на предыдущий URL после регистрации в Joomla? - PullRequest
0 голосов
/ 01 марта 2012

Я занимаюсь разработкой компонента, который требует входа на каком-то уровне, а затем, если пользователь не вошел в систему, я разместил ссылку для входа, которая переводит пользователя на страницу входа со следующим в строке запроса.

return=<?php echo base64_encode($_SERVER['REQUEST_URI']);?>

После входа в систему он возвращается на эту страницу, но есть ли способ решить эту проблему, если пользователь не зарегистрирован и пользователь начинает регистрацию? Есть ли способ сделать это, не меняя что-то в Joomla самостоятельно? например, просто установив что-то в cookie-файл, например Или мне нужно будет что-то изменить в компоненте или модуле регистрации Joomla. Или есть какой-нибудь плагин для этого?

Любой ответ будет оценен, пожалуйста, расскажите, что вы знаете, чтобы он мог дать мне лучшую подсказку.

Ответы [ 2 ]

0 голосов
/ 19 августа 2017

Этого можно добиться с помощью плагина (по крайней мере, в Joomla 3.x - не уверен, насколько далеко это будет работать без рук). Ключевым моментом здесь является событие onUserAfterSave, которое сообщает вам, является ли пользователь новым или существующим.

Я написал код ниже некоторое время назад, поэтому не могу вспомнить точную причину, по которой перенаправление не могло быть выполнено из обработчика события onUserAfterSave, но я думаю, что перенаправление впоследствии переопределяется в другом месте основного кода управления пользователями Joomla, если вы пытаетесь сделать это оттуда, сохраняя флаг в сеансе и проверяя его в более позднем обработчике событий.

class PlgUserSignupRedirect extends JPlugin
{
    public function onUserAfterSave($user, $isnew, $success, $msg)
    {
        $app = JFactory::getApplication();

        // If the user isn't new we don't act
        if (!$isnew) {
            return false;
        }

        $session = JFactory::getSession();
        $session->set('signupRedirect', 1);

        return true;
    }

    function onAfterRender() {
        $session = JFactory::getSession();
        if ($session->get('signupRedirect')) {
            JFactory::getApplication()->redirect($_SERVER['HTTP_REFERER']);
            $session->clear('signupRedirect');
        }
    }
}
0 голосов
/ 01 марта 2012

В вашем компоненте вы можете попытаться сохранить реферрера в Joomla! сеанс - я не верю, что сеанс изменяется или заменяется во время входа в систему. У меня не было времени попробовать это, но это должно сработать.

Сохранить:

$session = JFactory::getSession();
$session->set('theReferrer', $_SERVER['HTTP_REFERER'], 'mycomponentname'); 

Извлечь:

$session = JFactory::getSession(); 
$redirectTo = $session->get('theReferrer', '', 'mycomponentname');

Тогда вы можете просто использовать setRedirect, прежде чем вернуться.

$this->setRedirect($redirectTo);
...