_catalogSearchAdvanced = $catalogSearchAdvanced; $this->_catalogLayer = $layerResolver->get(); $this->_urlFactory = $urlFactory; parent::__construct($context, $data); } /** * @inheritdoc */ protected function _prepareLayout() { $this->pageConfig->getTitle()->set($this->getPageTitle()); $breadcrumbs = $this->getLayout()->getBlock('breadcrumbs'); if ($breadcrumbs) { $breadcrumbs->addCrumb( 'home', [ 'label' => __('Home'), 'title' => __('Go to Home Page'), 'link' => $this->_storeManager->getStore()->getBaseUrl() ] )->addCrumb( 'search', ['label' => __('Catalog Advanced Search'), 'link' => $this->getUrl('*/*/')] )->addCrumb( 'search_result', ['label' => __('Results')] ); } return parent::_prepareLayout(); } /** * Get page title * * @return \Magento\Framework\Phrase */ private function getPageTitle() { return __('Advanced Search Results'); } /** * Set order options * * @return void */ public function setListOrders() { /* @var $category \Magento\Catalog\Model\Category */ $category = $this->_catalogLayer->getCurrentCategory(); $availableOrders = $category->getAvailableSortByOptions(); unset($availableOrders['position']); $this->getChildBlock('search_result_list')->setAvailableOrders($availableOrders); } /** * Set view mode options * * @return void */ public function setListModes() { $this->getChildBlock('search_result_list')->setModes(['grid' => __('Grid'), 'list' => __('List')]); } /** * Initialize list collection. * * @return void */ public function setListCollection() { $this->getChildBlock('search_result_list')->setCollection($this->_getProductCollection()); } /** * Get product collection. * * @return Collection */ protected function _getProductCollection() { return $this->getSearchModel()->getProductCollection(); } /** * Set search model. * * @return Advanced */ public function getSearchModel() { return $this->_catalogSearchAdvanced; } /** * Get result count. * * @return mixed */ public function getResultCount() { if (!$this->getData('result_count')) { $size = $this->getSearchModel()->getProductCollection()->getSize(); $this->setResultCount($size); } return $this->getData('result_count'); } /** * Get product list HTML. * * @return string */ public function getProductListHtml() { return $this->getChildHtml('search_result_list'); } /** * Get form URL. * * @return string */ public function getFormUrl() { return $this->_urlFactory->create()->addQueryParams( $this->getRequest()->getQueryValue() )->getUrl( '*/*/', ['_escape' => true] ); } /** * Get search criteria. * * @return array */ public function getSearchCriterias() { $searchCriterias = $this->getSearchModel()->getSearchCriterias(); $middle = ceil(count($searchCriterias) / 2); $left = array_slice($searchCriterias, 0, $middle); $right = array_slice($searchCriterias, $middle); return ['left' => $left, 'right' => $right]; } }