Magento 2 How to get layer navigation filters available in rest api?
-
15-04-2021 - |
質問
Here am trying to get layered navigation available filters here is my code
$filterableAttributes = $this->filterableAttributes;
$layerResolver = $this->layerResolver;
$filterList = $this->objectmanager->create(
\Magento\Catalog\Model\Layer\FilterList::class,
[
'filterableAttributes' => $filterableAttributes
]
);
$filtersResponse = array();
$sortOptionsResponse = array();
$layer = $layerResolver->get();
$layer->setCurrentCategory($param['categoryId']);
$filters = $filterList->getFilters($layer);
$maxPrice = $layer->getProductCollection()->getMaxPrice();
$minPrice = $layer->getProductCollection()->getMinPrice();
$i = 0;
foreach($filters as $filter)
{
//$availablefilter = $filter->getRequestVar(); //Gives the request param name such as 'cat' for Category, 'price' for Price
$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]['value'] = $item->getValue();
$filterValues[$j]['count'] = $item->getCount(); //Gives no. of products in each filter options
$j++;
}
if(!empty($filterValues) && count($filterValues)>1)
{
$filterArray['availablefilter'][$availablefilter] = $filterValues;
}
$i++;
}
Here am getting only price filter
, it should show 4 more attributes, those are enabled for Filter with Results
in admin.
Still am not able get all filter.
Where am doing wrong , can I get Help? thank you in advance.
解決
foreach ($filters as $filter) {
if(count($filter->getItems())){
$filtersResponse[$i]['name'] = $filter->getName();
if($filter->getName() == 'Price'){
$filtersResponse[$i]['attribute'] = "special_price";//strtolower($filter->getName());
$filtersResponse[$i]['type'] = "range";
}else{
$filtersResponse[$i]['type'] = ($filter->getName() =="Category")? "single" : "multi";
}
if($filter->getName() == 'Price'){
$filtersResponse[$i]['values']['min_value'] = $minPrice; //$layer->getProductCollection()->getMinPrice();
$filtersResponse[$i]['values']['max_value'] = $maxPrice; //$layer->getProductCollection()->getMaxPrice();
}else{
foreach ($filter->getItems() as $j => $item) {
$filtersResponse[$i]['attribute'] = $item->getFilter()->getRequestVar();
$filtersResponse[$i]['values'][$j]['label'] = str_replace("&","&",$item->getLabel());
$filtersResponse[$i]['values'][$j]['value'] = $item->getValue();
}
}
$i++;
}
}
所属していません magento.stackexchange