111 lines
3.9 KiB
PHP
111 lines
3.9 KiB
PHP
<?php
|
|
/**
|
|
* 2017-2019 Zemez
|
|
*
|
|
* JX Search
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to the General Public License (GPL 2.0)
|
|
* that is bundled with this package in the file LICENSE.txt.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://opensource.org/licenses/GPL-2.0
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* Do not edit or add to this file if you wish to upgrade the module to newer
|
|
* versions in the future.
|
|
*
|
|
* @author Zemez (Alexander Grosul)
|
|
* @copyright 2017-2019 Zemez
|
|
* @license http://opensource.org/licenses/GPL-2.0 General Public License (GPL 2.0)
|
|
*/
|
|
|
|
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\SortOrderFactory;
|
|
use PrestaShop\PrestaShop\Core\Product\Search\SortOrder;
|
|
use Symfony\Component\Translation\TranslatorInterface;
|
|
|
|
class JxSearchProvider implements ProductSearchProviderInterface
|
|
{
|
|
private $translator;
|
|
private $sortOrderFactory;
|
|
|
|
public function __construct(
|
|
TranslatorInterface $translator
|
|
) {
|
|
$this->translator = $translator;
|
|
$this->sortOrderFactory = new SortOrderFactory($this->translator);
|
|
}
|
|
|
|
private function getProductsOrCount(
|
|
ProductSearchContext $context,
|
|
ProductSearchQuery $query,
|
|
$type = 'products'
|
|
) {
|
|
$jxsearchclass = new JxSearchSearch();
|
|
$category_id = Tools::getValue('search_categories');
|
|
if (($q = Tools::getValue('search_query')) && !is_array($q)) {
|
|
$q = Tools::replaceAccentedChars(urldecode($q));
|
|
$search = $jxsearchclass->jxfind(
|
|
$context->getIdLang(),
|
|
$q,
|
|
$category_id,
|
|
$query->getPage(),
|
|
$query->getResultsPerPage(),
|
|
$query->getSortOrder()->toLegacyOrderBy(),
|
|
$query->getSortOrder()->toLegacyOrderWay()
|
|
);
|
|
if ($type == 'products') {
|
|
return $search['result'];
|
|
} else {
|
|
return $search['total'];
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function runQuery(
|
|
ProductSearchContext $context,
|
|
ProductSearchQuery $query
|
|
) {
|
|
|
|
if (!$products = $this->getProductsOrCount($context, $query, 'products')) {
|
|
$products = array();
|
|
}
|
|
$count = $this->getProductsOrCount($context, $query, 'count');
|
|
$result = new ProductSearchResult();
|
|
$result
|
|
->setProducts($products)
|
|
->setTotalProductsCount($count);
|
|
$result->setAvailableSortOrders(
|
|
array(
|
|
(new SortOrder('product', 'date_add', 'desc'))->setLabel(
|
|
$this->translator->trans('Date added, newest to oldest', array(), 'Shop.Theme.Catalog')
|
|
),
|
|
(new SortOrder('product', 'date_add', 'asc'))->setLabel(
|
|
$this->translator->trans('Date added, oldest to newest', array(), 'Shop.Theme.Catalog')
|
|
),
|
|
(new SortOrder('product', 'name', 'asc'))->setLabel(
|
|
$this->translator->trans('Name, A to Z', array(), 'Shop.Theme.Catalog')
|
|
),
|
|
(new SortOrder('product', 'name', 'desc'))->setLabel(
|
|
$this->translator->trans('Name, Z to A', array(), 'Shop.Theme.Catalog')
|
|
),
|
|
(new SortOrder('product', 'price', 'asc'))->setLabel(
|
|
$this->translator->trans('Price, low to high', array(), 'Shop.Theme.Catalog')
|
|
),
|
|
(new SortOrder('product', 'price', 'desc'))->setLabel(
|
|
$this->translator->trans('Price, high to low', array(), 'Shop.Theme.Catalog')
|
|
),
|
|
)
|
|
);
|
|
|
|
return $result;
|
|
}
|
|
}
|