Как добавить пользовательское поле "Сортировать по" в prestashop?
Я новичок в Prestashop, и я пытаюсь добавить новое поле "Сортировать по" ( где по умолчанию у вас есть: "релевантность", "имя, от A до Z" , "имя, от Z до A", "Цена, от low до high", " Цена, от high до low" )
Как вы, ребята, знаете, функциональность находится в модуле называется: "Ps_facetedsearch" , ссылка здесь.
Я пытался:
- Редактирование файлов модуля, это работает, но я не могу обновить модуль больше, если я хочу сохранить функциональность.
- Переопределение, но не может заставить его работать, он все еще использует тот же старый модуль, а не переопределенный.
Поэтому мои вопросы таковы:
- Как вы можете добавить дополнительное поле "Сортировать по" в список продуктов (фронт) самым элегантным / простым способом?Я хотел бы услышать о любых других подходах к этой проблеме.
- Вы можете сделать это без override/s, Если вы, например, купили другой модуль, который переопределяет основной модуль ("Ps_facetedsearch", так что два переопределения не будут конфликтовать)
Любые советы приветствуются!!!
Версия PrestaShop: 1.7.4.2
Строки в модуле Ps_facetedsearch, которые мне нужно скопировать / вставить, чтобы добавить дополнительное поле "Сортировать по":
private function getAvailableSortOrders()
{
return [
(new SortOrder('product', 'position', 'asc'))->setLabel(
$this->module->getTranslator()->trans('Relevance', array(), 'Modules.Facetedsearch.Shop')
),
(new SortOrder('product', 'name', 'asc'))->setLabel(
$this->module->getTranslator()->trans('Name, A to Z', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'name', 'desc'))->setLabel(
$this->module->getTranslator()->trans('Name, Z to A', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'price', 'asc'))->setLabel(
$this->module->getTranslator()->trans('Price, low to high', array(), 'Shop.Theme.Catalog')
),
(new SortOrder('product', 'price', 'desc'))->setLabel(
$this->module->getTranslator()->trans('Price, high to low', array(), 'Shop.Theme.Catalog')
)
// copy and paste here for another one, but lose the upgradability
// of a module.
];
}
Найдено в Ps_FacetedsearchProductSearchProvider.РНР (строки 117-136)

Ответы - Как добавить пользовательское поле "Сортировать по" в prestashop? / How can I add a custom product "Sort by" field in prestashop?

02.10.2018 03:17:04
Вы можете добавить пользовательскую сортировку по параметру, переопределив Ps_Facetedsearch
в папке ps_facetedsearch.php
; (создать папки, если не существует) и ниже код в этом файле.
override/modules/ps_facetedsearch
2) Добавить файл <?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;
}
}
}
в папке Ps_FacetedsearchProductSearchProvider.php
; (создайте папки, если они не существуют)и добавьте в них код ниже.
override/modules/ps_facetedsearch/src
3) убедитесь<?php
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, '..', '..', '..', '..', 'modules', 'ps_facetedsearch', 'src', 'Ps_FacetedsearchProductSearchProvider.php',
));
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, '..', '..', '..', '..', 'modules', 'ps_facetedsearch', 'src', 'Ps_FacetedsearchFiltersConverter.php',
));
require_once implode(DIRECTORY_SEPARATOR, array(
__DIR__, '..', '..', '..', '..', 'modules', 'ps_facetedsearch', 'src', 'Ps_FacetedsearchFacetsURLSerializer.php',
));
use PrestaShop\PrestaShop\Core\Product\Search\URLFragmentSerializer;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchProviderInterface;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchContext;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchQuery;
use PrestaShop\PrestaShop\Core\Product\Search\ProductSearchResult;
use PrestaShop\PrestaShop\Core\Product\Search\Facet;
use PrestaShop\PrestaShop\Core\Product\Search\FacetCollection;
use PrestaShop\PrestaShop\Core\Product\Search\Filter;
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;
class Ps_FacetedsearchProductSearchProviderOverride extends Ps_FacetedsearchProductSearchProvider
{
private $module;
public function __construct(Ps_Facetedsearch $module)
{
$this->module = $module;
}
public function runQuery(
ProductSearchContext $context,
ProductSearchQuery $query
) {
$facetedSearch = new Ps_FacetedsearchProductSearchProvider($this->module);
$result = $facetedSearch->runQuery($context, $query);
$sortOrders = $this->getAvailableSortOrders();
foreach ($sortOrders as $sortOrder) {
$result->addAvailableSortOrder($sortOrder);
}
return $result;
}
/**
* New sort order that needs to be appended
*
* @return array
*/
private function getAvailableSortOrders()
{
return [
// add your custom sort by orders here;
];
}
}
включены в backend; от Advance Parameters > Performance
4) чтобы загрузить переопределения, вам нужно overrides
автозаполнения, и для этого вам нужно удалить re-index
-файл; удалить re-index
-файл из class_index.php
и var/cache/dev
.
5) Проверьте ваш магазин; будет добавлен новый пользовательский порядок сортировки.
Надеюсь, это поможет!

if ($query->getIdCategory()) {}
.Но,это не работает для меня.Не могли бы вы дать мне предложение.:-@Праджапати Divyesh

24.10.2019 05:48:41
Для 1.7.4.икс
- Перейти к /модули/ps_facetedsearch/ГРЦ
- Откройте Ps_FacetedsearchProductSearchProvider.РНР
- Найти
private function getAvailableSortOrders()
- и добавить то, что вы хотите, как:
(новый сортировщик ('product', 'date_add', 'desc')) - > setLabel( $this - > module - > > getTranslator () - > > > trans ('Дата добавления: последняя первая', array (), ' модули.Facetedsearch.Магазин') ), (новый сортировщик ('product', 'date_add', 'asc')) - > setLabel( $этом->модуль->getTranslator()->транс('добавлено: ранние первые', массив(), 'модули.Facetedsearch.Магазин') ), (новый сортировщик ('продукт', 'позиция', 'asc')) - > setLabel( $этом->модуль->getTranslator()->транс('значение', массив(), 'модули.Facetedsearch.Магазин') ),
для 1.7.6.икс
Вы можете найти этот файл в папке / modules/ps_facetedsearch/src/Product / SearchProvider.РНР
и найти:
private function getAvailableSortOrders()
для старых версий: - темы / по умолчанию / продукт-сортировка.ТПЛ - добавить как:
<option value="date_add:desc" {if $orderby eq 'date_add' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Date added: latest first'}</option>