【问题标题】:Is there a way to make Prestashop's Layared Filter Module to use query parameters instead of anchors (hashes)?有没有办法让 Prestashop 的分层过滤器模块使用查询参数而不是锚(哈希)?
【发布时间】:2017-03-23 16:25:15
【问题描述】:

有没有办法让标准 PrestaShop 的分层过滤器模块使用 URL 参数而不是锚点(哈希后的部分)? 我提到我希望分层过滤器生成并接受这样的 URL(或者可能以某种方式不同,但关键是使用参数而不是使用哈希)

my-example-shop.ru/some-category/?color=red&size=xl

而不是这个:

my-example-shop.ru/some-category#/color-red/size-xl

原因是大部分广告系统会在URL中添加一些参数,但他们通常将其直接添加到URL的末尾,而不是尝试分析URL结构并将参数插入到正确的位置。

所以,据我所知,显而易见的解决方案是避免在 url 中使用哈希,仅使用查询参数,并使用 history.pushState 更改 URL 而不刷新整个页面...... 这似乎很明显,可用,但我找不到任何可以这样做的现成解决方案,我什至找不到有关某人如何做到这一点的信息..

所以问题是:

  • 有现成的解决方案吗?

  • 是否有任何描述的方法可以自己实现这一目标?

提前致谢。

UPD

我自己现在发现的只是这样的 URL 可以被接受:

my-example-shop.ru/some-category/color-red/size-xl
my-example-shop.ru/some-category?selected_filters=/color-red/size-xl

但是任何过滤器更改都会导致再次使用哈希(afaik,哈希过滤器值会覆盖通过 selected_filters 参数传递的值,因此后续导航只会忽略 selected_filters)。换句话说 - 我只能清除条目 URL,但我无法使 URL 变得干净以供后续导航。

【问题讨论】:

  • 您必须为此进行定制。您可以关注和修改 prestashop 调度程序类。 root/classes/Dispatcher.php 。 Prestashop 完整的 url 系统由调度员控制。您可以从默认路由更改layered_rule
  • 不幸的是,这还不够,因为分层过滤器的行为不仅仅是关于路由,它是关于解析和操作 blocklayered.php 和 blocklayered.js 中的 URL,而 '#' 方式似乎被深度硬编码...

标签: prestashop prestashop-1.6 pushstate html5-history


【解决方案1】:

变化很大。 您应该创建覆盖类/Dispatcher.php

对于过滤器,您应该编辑文件:blocklayered/blocklayered.php 查找函数:getSelectedFilters()

里面有两个foreach,你应该从你需要的url“featured”字段中退出并编译新数组“$selected_filters”

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多