【发布时间】: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