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; } }