helper = $helper; $this->json = $json ?: ObjectManager::getInstance()->get(Json::class); parent::__construct($context, $data); } public function getNavConfig() { $config = [ 'clearUrl' => $this->getClearUrl(), 'scrollToTop' => 1, 'loaderFilter' => (bool)$this->getModuleLoadersConfig('loader_type_filters'), 'loaderContent' => (bool)$this->getModuleLoadersConfig('loader_type_content'), 'loaderPage' => (bool)$this->getModuleLoadersConfig('loader_type_page'), 'abortPrev' => (bool)$this->helper->getModuleConfig('general/abort_prev_request'), ]; if ($config['loaderContent']) { $config['loaderContentSelector'] = $this->getSelectorProducts(); } return $this->json->serialize($config); } /** * Retrieve Clear Filters URL * * @return string */ public function getClearUrl() { $filterState = []; foreach ($this->getActiveFilters() as $item) { $filterState[$item->getFilter()->getRequestVar()] = $item->getFilter()->getCleanValue(); } $params['_current'] = true; $params['_use_rewrite'] = true; $params['_query'] = $filterState; $params['_escape'] = true; return $this->_urlBuilder->getUrl('*/*/*', $params); } /** * Retrieve active filters * * @return array */ public function getActiveFilters() { $filters = $this->getLayer()->getState()->getFilters(); if (!is_array($filters)) { $filters = []; } return $filters; } /** * Retrieve Layer object * * @return Layer */ public function getLayer() { if (!$this->hasData('layer')) { $_catalogLayer = $this->_loadObject(Resolver::class)->get(); $this->setLayer($_catalogLayer); } return $this->_getData('layer'); } /** * @param string $path * @param null $storeCode * @return mixed */ public function getModuleLoadersConfig($path = '', $storeCode = null) { return $this->helper->getModuleConfig('loaders/' . $path, $storeCode); } /** * @return string */ public function getSelectorProducts() { $products_container = $this->getModuleLoadersConfig('loader_content_selector') ?: '.column.main .products.products-grid, .column.main .products.products-list, .column.main .products-grid.grid'; return $products_container; } }