Magento – Magento2 how to apply layered navigation filters at REST API Level

apifilterlayered-navigationmagento2rest api

I would like to implement below REST API in magento 2

"How to retrieve which layered navigation filters are applied as like
in the product list page?"

Can you please suggest me how we can achieve (or) possibilities?

enter image description here

In magento 1 at website level we can get applied filters at list page (list.phtml) by following snippet

$appliedFilters =
Mage::getSingleton('catalog/layer')->getState()->getFilters();

(and)

$appliedFilters =
Mage::getSingleton(‘Mage_Catalog_Block_Layer_State’)->getActiveFilters();

But in magento 2 at api level how we can implement ?

Best Answer

$this->layerResolver->setCurrentCategory($id);
            $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
            $fill = $objectManager->create('Magento\Catalog\Model\Layer\Category\FilterableAttributeList');
            $filterList = new \Magento\Catalog\Model\Layer\FilterList($objectManager,$fill);
            $filterAttributes = $filterList->getFilters($this->layerResolver);
            $filterArray = array();
            $i = 0;

            foreach($filterAttributes as $filter){
                $availablefilter = (string)$filter->getName(); //Gives Display Name of the filter such as Category,Price etc.
                $items = $filter->getItems(); //Gives all available filter options in that particular filter
                $filterValues = array();
                $j = 0;
                foreach($items as $item){
                   $filterValues[$j]['display'] = strip_tags($item->getLabel());
                   $filterValues[$j]['label'] = $item->getValue();
                   $filterValues[$j]['count'] = $item->getCount(); //Gives no. of products in each filter options
                   $j++;
                }
                if(!empty($filterValues)){
                   $filterArray['availablefilter'][$availablefilter] =  $filterValues;
                }
                $i++;
            }
            return array($filterArray);

I Have implemented same as in list page , but not i need to develop for the search result page , how could i?

Related Topic