как вернуть браузер на предыдущую страницу ?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

Здравствуйте !
Помогите пожалуйста решить наверняка простейшую проблему.
Имеется действие, которое может быть вызвано по ссылкам с разных страниц приложения.

Код: Выделить всё

    $this->menu=array(
        array(
            'label'=>'Действие', 'url'=>'#', 'linkOptions'=>array('submit'=>array('some_controller/some_action', 'param'=>$value))
        ),
    );
Нужно, чтобы после выполнения some_action браузер вернулся именно на ту страницу, с которой было обращение к действию.
Где-то, не помню уже где, откопал некий шаблон действия, который выглядит так

Код: Выделить всё

    public function actionsome_action($param)
    {
        if(Yii::app()->request->isPostRequest)
        {
                    // операции с ActiveRecord

                    if(!isset($_GET['ajax']))
                        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
                }
        else
                    throw new CHttpException(400,'Invalid request');
    }
Думал, что фрагмент

Код: Выделить всё

                    if(!isset($_GET['ajax']))
                        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
как раз и служит моей цели, но на деле оказалось совсем не так.
Объясните пожалуйста, как это работает и как сделать то, что мне нужно.
Что означает переменная $_POST['returnUrl'], кто и каким образом ее инициализирует ?
Или мне самому нужно ее создать и инициализировать нужным мне адресом возврата ?
По-хорошему, после выполнения действия мне вообще нужно просто обновить CGridView, чтобы он отображал обновленные данные.
Можно ли это сделать с помощью $this->menu ?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: как вернуть браузер на предыдущую страницу ?

Сообщение lancecoder »

этот шаблон взят из дефолтного экшена, помоему удаление, а вы передаете POST, что его ждете?
http://www.google.ru/search?q=yii+returnUrl

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: как вернуть браузер на предыдущую страницу ?

Сообщение lancecoder »

if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
а это вообще высший пилотаж:
если у вас нет яблок, тогда идите в (непомню как звали или домой)

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

lancecoder писал(а):этот шаблон взят из дефолтного экшена, помоему удаление, а вы передаете POST, что его ждете?
http://www.google.ru/search?q=yii+returnUrl
так ведь в ссылке же написано submit ...
ну и потом, действие то отрабатывает.
Проблема то в том, что я не могу сделать возврат туда, куда надо.

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

lancecoder писал(а):
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
а это вообще высший пилотаж:
если у вас нет яблок, тогда идите в (непомню как звали или домой)
Ну так я же и говорю - взял этот код не помню откуда ;(
Как на самом то деле сделать правильно ?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: как вернуть браузер на предыдущую страницу ?

Сообщение lancecoder »

lancecoder писал(а):этот шаблон взят из дефолтного экшена, помоему удаление, а вы передаете POST, что его ждете?
http://www.google.ru/search?q=yii+returnUrl

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

lancecoder писал(а):
lancecoder писал(а):этот шаблон взят из дефолтного экшена, помоему удаление, а вы передаете POST, что его ждете?
http://www.google.ru/search?q=yii+returnUrl
прошу прощения,но я не понял

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

пробовал перед тем, как рендерить представление со ссылкой на some_action() сформировать этот самый returnUrl вставкой такого

Код: Выделить всё

                Yii::app()->user->setReturnUrl('controller/action');
 
или такого кода

Код: Выделить всё

                $_POST['returnUrl'] = Yii::app()->controller->createUrl('controller/action');
 
не помогло ;(

А вот этот код вроде бы дает желаемый результат

Код: Выделить всё

public function actionsome_action($param)
    {
        if(Yii::app()->request->isPostRequest)
        {
                    // операции с ActiveRecord

                    if (!Yii::app()->request->isAjaxRequest)
                        $this->redirect(Yii::app()->request->urlReferrer); 
                }
        else
                    throw new CHttpException(400,'Invalid request');
    }
 
Я правильно делаю ?

Аватара пользователя
NeverDie
Сообщения: 69
Зарегистрирован: 2012.05.13, 04:05
Откуда: Минск
Контактная информация:

Re: как вернуть браузер на предыдущую страницу ?

Сообщение NeverDie »

ещё, как вариант, можно использовать js history

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

NeverDie писал(а):ещё, как вариант, можно использовать js history
если можно, поподробнее


maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

Я не это имел ввиду.
Как с помощью window.history сделать автоматический, а не кликом по ссылке, возврат после выполнения some_action ?

ask
Сообщения: 19
Зарегистрирован: 2012.04.12, 21:53

Re: как вернуть браузер на предыдущую страницу ?

Сообщение ask »

ну, а так?

Код: Выделить всё

$this->redirect($_SERVER['HTTP_REFERER']);
 

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

ask писал(а):ну, а так?

Код: Выделить всё

$this->redirect($_SERVER['HTTP_REFERER']);
Разве это не то же самое, что и
$this->redirect(Yii::app()->request->urlReferrer); ?

ask
Сообщения: 19
Зарегистрирован: 2012.04.12, 21:53

Re: как вернуть браузер на предыдущую страницу ?

Сообщение ask »

ну, да =) если вы сделали так, так и оставляйте, думаю, так будет нормально

maxyer
Сообщения: 290
Зарегистрирован: 2012.01.10, 17:55
Откуда: отсюда

Re: как вернуть браузер на предыдущую страницу ?

Сообщение maxyer »

Меня, признаться, удивляет, что ответы в теме какие-то неуверенные, на уровне предположений.
Неужели это какая-то неизученная доселе тема, которой никто толком не занимался ?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: как вернуть браузер на предыдущую страницу ?

Сообщение lancecoder »

returnUrl есть для этого но заним нужно следить, есть расширения на эту тему

Ответить