Как добавить пользовательское поле "Сортировать по" в prestashop?

Как добавить пользовательское поле "Сортировать по" в prestashop?

30.09.2018 09:22:41 Просмотров 36 Источник

Я новичок в Prestashop, и я пытаюсь добавить новое поле "Сортировать по" ( где по умолчанию у вас есть: "релевантность", "имя, от A до Z" , "имя, от Z до A", "Цена, от low до high", " Цена, от high до low" )

Как вы, ребята, знаете, функциональность находится в модуле называется: "Ps_facetedsearch" , ссылка здесь.

Я пытался:

  • Редактирование файлов модуля, это работает, но я не могу обновить модуль больше, если я хочу сохранить функциональность.
  • Переопределение, но не может заставить его работать, он все еще использует тот же старый модуль, а не переопределенный.

Поэтому мои вопросы таковы:

  1. Как вы можете добавить дополнительное поле "Сортировать по" в список продуктов (фронт) самым элегантным / простым способом?Я хотел бы услышать о любых других подходах к этой проблеме.
  2. Вы можете сделать это без 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)

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/52580822/how-can-i-add-a-custom-product-sort-by-field-in-prestashop#comment92117853_52580822
Возможно, это можно сделать с помощью переопределений

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

Divyesh Prajapati

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) Проверьте ваш магазин; будет добавлен новый пользовательский порядок сортировки.

Надеюсь, это поможет!

https://stackoverflow.com/questions/52580822/how-can-i-add-a-custom-product-sort-by-field-in-prestashop/52608161#comment99061782_52608161
Привет, мне нужно включить Facetedsearch в поиск продукта too.So удалено if ($query->getIdCategory()) {}.Но,это не работает для меня.Не могли бы вы дать мне предложение.:-@Праджапати Divyesh
Sahin S.

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>

Закрыть X