/** * Pagination is HARD. We let the core do the heavy lifting from * a simple representation of the pagination. * * Generated URLs will include the page number, obviously, * but also the sort order and the "q" (facets) parameters. * * @param ProductSearchQuery $query * @param ProductSearchResult $result * * @return an array that makes rendering the pagination very easy */ protected function getTemplateVarPagination(ProductSearchQuery $query, ProductSearchResult $result) { $pagination = new Pagination(); $pagination->setPage($query->getPage())->setPagesCount(ceil($result->getTotalProductsCount() / $query->getResultsPerPage())); $totalItems = $result->getTotalProductsCount(); $itemsShownFrom = $query->getResultsPerPage() * ($query->getPage() - 1) + 1; $itemsShownTo = $query->getResultsPerPage() * $query->getPage(); return array('total_items' => $totalItems, 'items_shown_from' => $itemsShownFrom, 'items_shown_to' => $itemsShownTo <= $totalItems ? $itemsShownTo : $totalItems, 'pages' => array_map(function ($link) { $link['url'] = $this->updateQueryString(array('page' => $link['page'])); return $link; }, $pagination->buildLinks())); }
public function getFacetCollectionFromEncodedFacets(ProductSearchQuery $query) { // do not compute range filters, all info we need is encoded in $encodedFacets $compute_range_filters = false; $filterBlock = $this->module->getFilterBlock([], $compute_range_filters); $queryTemplate = $this->filtersConverter->getFacetsFromFacetedSearchFilters($filterBlock['filters']); $facets = $this->facetsSerializer->setFiltersFromEncodedFacets($queryTemplate, $query->getEncodedFacets()); return (new FacetCollection())->setFacets($facets); }
public function runQuery(ProductSearchContext $context, ProductSearchQuery $query) { if (!($products = ProductSale::getBestSales($context->getIdLang(), $query->getPage(), $query->getResultsPerPage(), $query->getSortOrder()->toLegacyOrderBy(), $query->getSortOrder()->toLegacyOrderWay()))) { $products = array(); } $count = (int) ProductSale::getNbSales(); $result = new ProductSearchResult(); $result->setProducts($products)->setTotalProductsCount($count); $result->setAvailableSortOrders(array((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; }
private function getProductsOrCount(ProductSearchContext $context, ProductSearchQuery $query, $type = 'products') { if ($query->getSortOrder()->isRandom()) { return $this->category->getProducts($context->getIdLang(), 1, $query->getResultsPerPage(), null, null, $type !== 'products', true, true, $query->getResultsPerPage()); } else { return $this->category->getProducts($context->getIdLang(), $query->getPage(), $query->getResultsPerPage(), $query->getSortOrder()->toLegacyOrderBy(), $query->getSortOrder()->toLegacyOrderWay(), $type !== 'products'); } }
protected function getProductSearchQuery() { $query = new ProductSearchQuery(); $query->setSortOrder(new SortOrder('product', Tools::getProductsOrder('by'), Tools::getProductsOrder('way')))->setSearchString($this->search_string)->setSearchTag($this->search_tag); return $query; }
public function runQuery(ProductSearchContext $context, ProductSearchQuery $query) { $products = []; $count = 0; if ($string = $query->getSearchString()) { $result = Search::find($context->getIdLang(), Tools::replaceAccentedChars(urldecode($string)), $query->getPage(), $query->getResultsPerPage(), $query->getSortOrder()->toLegacyOrderBy(), $query->getSortOrder()->toLegacyOrderWay(), false, false, null); $products = $result['result']; $count = $result['total']; } elseif ($tag = $query->getSearchTag()) { $products = Search::searchTag($context->getIdLang(), urldecode($tag), false, $query->getPage(), $query->getResultsPerPage(), $query->getSortOrder()->toLegacyOrderBy(true), $query->getSortOrder()->toLegacyOrderWay(), false, null); $count = Search::searchTag($context->getIdLang(), urldecode($tag), true, $query->getPage(), $query->getResultsPerPage(), $query->getSortOrder()->toLegacyOrderBy(true), $query->getSortOrder()->toLegacyOrderWay(), false, null); } $result = new ProductSearchResult(); $result->setProducts($products)->setTotalProductsCount($count); $result->setAvailableSortOrders($this->sortOrderFactory->getDefaultSortOrders()); return $result; }
private function getProductsOrCount(ProductSearchContext $context, ProductSearchQuery $query, $type = 'products') { return Product::getNewProducts($context->getIdLang(), $query->getPage(), $query->getResultsPerPage(), $type !== 'products', $query->getSortOrder()->toLegacyOrderBy(), $query->getSortOrder()->toLegacyOrderWay()); }
protected function getProductSearchQuery() { $query = new ProductSearchQuery(); $query->setIdManufacturer($this->manufacturer->id)->setSortOrder(new SortOrder('product', Tools::getProductsOrder('by'), Tools::getProductsOrder('way'))); return $query; }
protected function getProductSearchQuery() { $query = new ProductSearchQuery(); $query->setQueryType('best-sales')->setSortOrder(new SortOrder('product', 'name', 'asc')); return $query; }
private function getProductsOrCount(ProductSearchContext $context, ProductSearchQuery $query, $type = 'products') { return $this->supplier->getProducts($this->supplier->id, $context->getIdLang(), $query->getPage(), $query->getResultsPerPage(), $query->getSortOrder()->toLegacyOrderBy(), $query->getSortOrder()->toLegacyOrderWay(), $type !== 'products'); }
protected function getProductSearchQuery() { $query = new ProductSearchQuery(); $query->setIdSupplier($this->supplier->id)->setSortOrder(new SortOrder('product', 'position', 'asc')); return $query; }
private function getRootCondition(ProductSearchContext $context, ProductSearchQuery $query) { if ($query->getIdCategory()) { return $this->qb->innerJoin($this->qb->table("category_product")->alias("cp"), $this->qb->equal($this->qb->field("cp", "id_product"), $this->qb->field("p", "id_product")))->andWhere($this->qb->equal($this->qb->field("cp", "id_category"), $this->qb->value((int) $query->getIdCategory()))); } }
protected function getProductSearchQuery() { $query = new ProductSearchQuery(); $query->setQueryType('new-products')->setSortOrder(new SortOrder('product', 'date_add', 'desc')); return $query; }
protected function getProducts() { $category = new Category((int) Configuration::get('HOME_FEATURED_CAT')); $searchProvider = new CategoryProductSearchProvider($this->context->getTranslator(), $category); $context = new ProductSearchContext($this->context); $query = new ProductSearchQuery(); $nProducts = Configuration::get('HOME_FEATURED_NBR'); if ($nProducts < 0) { $nProducts = 12; } $query->setResultsPerPage($nProducts)->setPage(1); if (Configuration::get('HOME_FEATURED_RANDOMIZE')) { $query->setSortOrder(SortOrder::random()); } else { $query->setSortOrder(new SortOrder('product', 'position', 'asc')); } $result = $searchProvider->runQuery($context, $query); $assembler = new ProductAssembler($this->context); $presenterFactory = new ProductPresenterFactory($this->context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter(new ImageRetriever($this->context->link), $this->context->link, new PriceFormatter(), new ProductColorsRetriever(), $this->context->getTranslator()); $products_for_template = []; foreach ($result->getProducts() as $rawProduct) { $products_for_template[] = $presenter->present($presentationSettings, $assembler->assembleProduct($rawProduct), $this->context->language); } return $products_for_template; }