Php 如何添加自定义产品;按“排序”;普雷斯塔索普球场?
我是Prestashop的新手,我正在尝试添加一个新的“排序依据”字段(默认情况下,您有:“相关性”、“名称,a到Z”、“名称,Z到a”、“价格,从低到高”、“价格,从高到低”) 正如大家所知,该功能位于名为: “Ps_facetedsearch”,链接 我试过:Php 如何添加自定义产品;按“排序”;普雷斯塔索普球场?,php,symfony,model-view-controller,prestashop,prestashop-1.7,Php,Symfony,Model View Controller,Prestashop,Prestashop 1.7,我是Prestashop的新手,我正在尝试添加一个新的“排序依据”字段(默认情况下,您有:“相关性”、“名称,a到Z”、“名称,Z到a”、“价格,从低到高”、“价格,从高到低”) 正如大家所知,该功能位于名为: “Ps_facetedsearch”,链接 我试过: 编辑模块文件,这是可行的,但是如果我想保留功能,我不能再升级模块了 重写,但似乎无法使其工作,它仍然使用相同的旧模块,而不是被重写的模块 所以我的问题是: 如何以最优雅/最简单的方式在产品列表(前面)中添加额外的“排序方式”字段?
- 编辑模块文件,这是可行的,但是如果我想保留功能,我不能再升级模块了
- 重写,但似乎无法使其工作,它仍然使用相同的旧模块,而不是被重写的模块
(第117-136行)您可以通过覆盖
Ps\u Facetedsearch
模块添加自定义排序方式选项
您可以按照以下步骤添加自定义排序顺序
1) 在文件夹override/modules/ps_facetedsearch
中添加文件ps_facetedsearch.php
;(如果不存在,则创建文件夹)和此文件中的以下代码
<?php
/**
* @override Ps_Facetedsearch
*/
if (!defined('_PS_VERSION_')) {
exit;
}
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, 'src', 'Ps_FacetedsearchProductSearchProvider.php',
));
class Ps_FacetedsearchOverride extends Ps_Facetedsearch
{
public function hookProductSearchProvider($params)
{
$query = $params['query'];
// do something with query,
// e.g. use $query->getIdCategory()
// to choose a template for filters.
// Query is an instance of:
// PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery
if ($query->getIdCategory()) {
return new Ps_FacetedsearchProductSearchProviderOverride($this);
} else {
return null;
}
}
}
3) 确保在后端启用了覆盖;从高级参数>性能
4) 要加载覆盖,您需要重新索引
自动加载,为此,您需要删除class_index.php
文件;从var/cache/dev
和var/cache/prod
文件夹中删除class_index.php
文件
5) 检查你的商店;将添加新的自定义排序顺序
希望有帮助 您可以通过覆盖
Ps\u Facetedsearch
模块添加自定义排序方式选项
您可以按照以下步骤添加自定义排序顺序
1) 在文件夹override/modules/ps_facetedsearch
中添加文件ps_facetedsearch.php
;(如果不存在,则创建文件夹)和此文件中的以下代码
<?php
/**
* @override Ps_Facetedsearch
*/
if (!defined('_PS_VERSION_')) {
exit;
}
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, 'src', 'Ps_FacetedsearchProductSearchProvider.php',
));
class Ps_FacetedsearchOverride extends Ps_Facetedsearch
{
public function hookProductSearchProvider($params)
{
$query = $params['query'];
// do something with query,
// e.g. use $query->getIdCategory()
// to choose a template for filters.
// Query is an instance of:
// PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery
if ($query->getIdCategory()) {
return new Ps_FacetedsearchProductSearchProviderOverride($this);
} else {
return null;
}
}
}
3) 确保在后端启用了覆盖;从高级参数>性能
4) 要加载覆盖,您需要重新索引
自动加载,为此,您需要删除class_index.php
文件;从var/cache/dev
和var/cache/prod
文件夹中删除class_index.php
文件
5) 检查你的商店;将添加新的自定义排序顺序
希望有帮助 适用于1.7.4.x
- 转到/modules/ps\u facetedsearch/src
- 打开Ps_FacetedsearchProductSearchProvider.php
- 查找
行私有函数getAvailableSortOrders()
- 并添加您想要的内容,如:
private function getAvailableSortOrders()
对于旧版本:
-themes/default/product-sort.tpl
-添加如下内容:
<option value="date_add:desc" {if $orderby eq 'date_add' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Date added: latest first'}</option>
{l s='Date added:latest first'}
对于1.7.4.x
- 转到/modules/ps\u facetedsearch/src
- 打开Ps_FacetedsearchProductSearchProvider.php
- 查找
行私有函数getAvailableSortOrders()
- 并添加您想要的内容,如:
private function getAvailableSortOrders()
对于旧版本:
-themes/default/product-sort.tpl
-添加如下内容:
<option value="date_add:desc" {if $orderby eq 'date_add' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Date added: latest first'}</option>
{l s='Date added:latest first'}
由于
ps\u facetedsearch
模块最近进行了一些更改,这里是基于@Divjesh答案的最新ps1.7.7.1版本:
override/modules/ps\u facetedsearch
中添加文件ps\u facetedsearch.php
(如果不存在,则创建文件夹),并将下面的代码放入该文件中由于
ps\u facetedsearch
模块最近进行了一些更改,这里是基于@Divjesh答案的最新ps1.7.7.1版本:
override/modules/ps\u facetedsearch
中添加文件ps\u facetedsearch.php
(如果不存在,则创建文件夹),并将下面的代码放入该文件中可能可以在Override的帮助下完成可能可以在Override的帮助下完成我需要包括Facetedsearch
<?php
use PrestaShop\Module\FacetedSearch\Filters;
use PrestaShop\Module\FacetedSearch\URLSerializer;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;
use PrestaShop\Module\FacetedSearch\Product\SearchProvider;
class SearchProviderOverride extends SearchProvider
{
private $_module;
public function __construct(
Ps_Facetedsearch $module,
Filters\Converter $converter,
URLSerializer $serializer,
SearchFactory $searchFactory = null
) {
parent::__construct($module, $converter, $serializer, $searchFactory);
$this->_module = $module;
}
public function runQuery(
ProductSearchContext $context,
ProductSearchQuery $query
) {
$result = parent::runQuery($context, $query);
$result->setAvailableSortOrders($this->getMyAvailableSortOrders());
return $result;
}
private function getMyAvailableSortOrders()
{
// define your SortOrders here for example:
$sortDateDesc = new SortOrder('product', 'date_add', 'desc');
$translator = $this->_module->getTranslator();
return [
$sortDateDesc->setLabel(
$translator->trans('Newest', [], 'Modules.Facetedsearch.Shop')
),
];
}
}