После нажатия кнопки «Назад» браузера загрузите последний поиск - PullRequest
0 голосов
/ 01 октября 2019

У меня есть собственный плагин в CMS за октябрь, который имеет функцию onFilter(), которая возвращает и отображает частичные данные. Когда пользователь нажимает на имя, он перенаправляет его на страницу с подробностями. И когда пользователь нажимает кнопку «Назад» в браузере, я хочу отобразить его последний поиск.

Я пробовал что-то вроде Session::push('data', $data) в onFilter() методе и Session::get('data') в onInit(), но это не сработало. $data - это список пабов.

Была ли у кого-нибудь такая же проблема?

Редактировать

public function onFilter()
{
    $result =
            Lounge::filterLounge($categories, $tags, $regions, $paidIds, $price_from, $search);

    Session::put('nameFilter', $result);

    return [
            '#list' => $this->renderPartial('loungelist::list.htm', [
                'list_data' => $result])
                ];
}
    public function getNameFilter() {
        $nameFilter = Session::get('nameFilter');
        return $nameFilter;
    }

Частично .htm

{% set list_data = __SELF__.getNameFilter() %}
{% for lounge in list_data %}
{{ lounge.name }}
{% endfor %}

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Вы должны опубликовать больше кода для нас, чтобы быть более полезными. Я предполагаю, что вы используете компонент. Вы используете AJAX? Сеанс выполнит эту работу.

В вашем файле component.php put onNameFilter() вы можете отправить данные в сеанс с помощью Session::put('nameFilter' $data);. Я предлагаю использовать более конкретные метки для ваших событий и ключей, поэтому я выбрал 'nameFilter'.

Вы захотите использовать метод в вашем component.php для вызова сеанса.

public function getNameFilter() {
    $nameFilter = Session::get('nameFilter');
    return $nameFilter;
}

Теперь в файлеpart.htm вы можете установить данные фильтра имен и получать к ним доступ, пока они находятся в сеансе:

 {% set nameFilterData = __SELF__.getNameFilter() %}

РЕДАКТИРОВАТЬ В ШОУ ОТРАЖЕНОКОД

Я не понимаю, как это работает в первый раз. Как выглядит ваша CMS страница? Как вы показываете фильтр «в первый раз»?

Ваша страница CMS имеет {% component 'something' %} правильно? Тогда в вашем файле default.htm у вас есть {% partial __SELF__~'::list %}?

В вашей части вам нужно будет отобразить list_data. Это что-нибудь показывает?

{% for list in list_data %}
    {{ list_data.name }}
{% endfor %}
0 голосов
/ 01 октября 2019

Как упоминает @mwilson, я бы использовал window.history на внешнем интерфейсе с функцией pushstate(), чтобы при изменении каждого фильтра вы передавали состояние, включая строки запроса, прежде чем запускать php, чтобы получить отфильтрованное содержимое. Я делал это раньше и работает очень хорошо.

...