浏览器后退按钮加载后的最后搜索

时间:2019-09-30 22:15:04

标签: laravel octobercms

我在10月的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 :(得分:0)

就像@mwilson提到的那样,我将在pushstate()函数的前端使用window.history,以便在更改每个过滤器时,在触发到php之前先推送包括查询字符串在内的状态,以获取过滤后的内容。我以前做过,而且效果很好。

答案 1 :(得分:0)

您应该发布更多代码,以对我们有所帮助。我假设您正在使用组件。您正在使用ajax吗?会话将完成这项工作。

在您的component.php中放置onNameFilter()事件,您可以使用Session::put('nameFilter' $data);将数据推送到会话中。我建议为事件和键使用更具体的标签,所以我选择了“ nameFilter”。

您将要在component.php中使用一种方法来调用会话。

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

现在,在partial.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 %}