Show filter attributes only for top categoryMagento 1.8.1 - Layered Navigation not showing attributes created programmaticallymagento attributes filter only in last (level 3) categoryCatalogSearch Reindex causes some items to disappearRemove code for saving the attributes of a bundle item to the parent bundle product while reindexingShow attribute filter in layered navigation only after another filter is selectedCustomize Layered Navigation and Catalog List BehaviourHide certain filter from layered navigation top categoryNo products or too less products shown in Layered Navigation / FilterLayered navigation missing attributesShow attribute value which applies to all items in a category
If two black hole event horizons overlap (touch) can they ever separate again?
What are good ways to spray paint a QR code on a footpath?
How to answer "write something on the board"?
Why would anyone even use a Portkey?
How hard is it to sell a home which is currently mortgaged?
Who voices the character "Finger" in The Fifth Element?
Most important new papers in computational complexity
Does any Greek word have a geminate consonant after a long vowel?
Most elegant way to write a one shot IF
Is the location of an aircraft spoiler really that vital?
How do I tell the reader that my character is autistic in Fantasy?
Sharing referee/AE report online to point out a grievous error in refereeing
What is the purpose of putting a capacitor on the primary side of a step-down transformer?
Is it legal to call shared_future::get() multiple times on the same instance in the same thread?
Find first and last non-zero column in each row of a pandas dataframe
Matrix decomposition
What could a reptilian race tell by candling their eggs?
Can two or more lightbeams (from a laser for example) have visible interference when they cross in mid-air*?
Adjective for 'made of pus' or 'corrupted by pus' or something of something of pus
Ordered list of OR journals
Who are these Discworld wizards from this picture?
What does the phrase "building hopping chop" mean here?
Should I share with a new service provider a bill from its competitor?
How to securely dispose of a smartphone?
Show filter attributes only for top category
Magento 1.8.1 - Layered Navigation not showing attributes created programmaticallymagento attributes filter only in last (level 3) categoryCatalogSearch Reindex causes some items to disappearRemove code for saving the attributes of a bundle item to the parent bundle product while reindexingShow attribute filter in layered navigation only after another filter is selectedCustomize Layered Navigation and Catalog List BehaviourHide certain filter from layered navigation top categoryNo products or too less products shown in Layered Navigation / FilterLayered navigation missing attributesShow attribute value which applies to all items in a category
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
We have 3 levels of categories. When we go to the top-level category page, filter attributes of only parent category are shown. But when we select an attribute filter, attributes of all child categories are also shown. We are using smile elastic suite. On the first load of parent category, it gets the filter items from the following:
protected function _initItems()
parent::_initItems();
foreach ($this->_items as $item)
$applyValue = $item->getLabel();
if (($valuePos = array_search($applyValue, $this->currentFilterValue)) !== false)
$item->setIsSelected(true);
$applyValue = $this->currentFilterValue;
unset($applyValue[$valuePos]);
else
$applyValue = array_merge($this->currentFilterValue, [$applyValue]);
$item->setApplyFilterValue(array_values($applyValue));
return $this;
This is returning the filter attributes as expected. However, on applying a filter attribute, all attributes of child categories are also shown. The filter is applied as follows:
protected function _getItemsData()
$attribute = $this->getAttributeModel();
/** @var MagentoCatalogSearchModelResourceModelFulltextCollection $productCollection */
$productCollection = $this->getLayer()->getProductCollection();
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$items = [];
$attributeCode = $attribute->getAttributeCode();
if ($attribute->getFrontendInput() == 'multiselect')
//echo '1<br/>';
if($this->_coreRegistry->registry('current_category'))
// echo '2<br/>';
$catId = $this->_coreRegistry->registry('current_category')->getId();
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode])) ;
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
// echo '4<br/>';
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
// $optionsFacetedData returning all attributes after filter
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
else
$catId = 'search';
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode]))
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
if (isset($optionsFacetedData['__other_docs']))
$this->hasMoreItems = $optionsFacetedData['__other_docs']['count'] > 0;
unset($optionsFacetedData['__other_docs']);
foreach ($optionsFacetedData as $value => $data)
$items[$value] = [
'label' => $this->tagFilter->filter($value),
'value' => $value,
'count' => $data['count'],
];
$items = $this->addOptionsData($items);
return $items;
Here, $productCollection->getFacetedData($this->getFilterField())
is returning data of all child category attributes. How to change this behaviour so that after applying a filter only top level category attributes are shown in filter?
magento2 layered-navigation
add a comment |
We have 3 levels of categories. When we go to the top-level category page, filter attributes of only parent category are shown. But when we select an attribute filter, attributes of all child categories are also shown. We are using smile elastic suite. On the first load of parent category, it gets the filter items from the following:
protected function _initItems()
parent::_initItems();
foreach ($this->_items as $item)
$applyValue = $item->getLabel();
if (($valuePos = array_search($applyValue, $this->currentFilterValue)) !== false)
$item->setIsSelected(true);
$applyValue = $this->currentFilterValue;
unset($applyValue[$valuePos]);
else
$applyValue = array_merge($this->currentFilterValue, [$applyValue]);
$item->setApplyFilterValue(array_values($applyValue));
return $this;
This is returning the filter attributes as expected. However, on applying a filter attribute, all attributes of child categories are also shown. The filter is applied as follows:
protected function _getItemsData()
$attribute = $this->getAttributeModel();
/** @var MagentoCatalogSearchModelResourceModelFulltextCollection $productCollection */
$productCollection = $this->getLayer()->getProductCollection();
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$items = [];
$attributeCode = $attribute->getAttributeCode();
if ($attribute->getFrontendInput() == 'multiselect')
//echo '1<br/>';
if($this->_coreRegistry->registry('current_category'))
// echo '2<br/>';
$catId = $this->_coreRegistry->registry('current_category')->getId();
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode])) ;
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
// echo '4<br/>';
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
// $optionsFacetedData returning all attributes after filter
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
else
$catId = 'search';
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode]))
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
if (isset($optionsFacetedData['__other_docs']))
$this->hasMoreItems = $optionsFacetedData['__other_docs']['count'] > 0;
unset($optionsFacetedData['__other_docs']);
foreach ($optionsFacetedData as $value => $data)
$items[$value] = [
'label' => $this->tagFilter->filter($value),
'value' => $value,
'count' => $data['count'],
];
$items = $this->addOptionsData($items);
return $items;
Here, $productCollection->getFacetedData($this->getFilterField())
is returning data of all child category attributes. How to change this behaviour so that after applying a filter only top level category attributes are shown in filter?
magento2 layered-navigation
add a comment |
We have 3 levels of categories. When we go to the top-level category page, filter attributes of only parent category are shown. But when we select an attribute filter, attributes of all child categories are also shown. We are using smile elastic suite. On the first load of parent category, it gets the filter items from the following:
protected function _initItems()
parent::_initItems();
foreach ($this->_items as $item)
$applyValue = $item->getLabel();
if (($valuePos = array_search($applyValue, $this->currentFilterValue)) !== false)
$item->setIsSelected(true);
$applyValue = $this->currentFilterValue;
unset($applyValue[$valuePos]);
else
$applyValue = array_merge($this->currentFilterValue, [$applyValue]);
$item->setApplyFilterValue(array_values($applyValue));
return $this;
This is returning the filter attributes as expected. However, on applying a filter attribute, all attributes of child categories are also shown. The filter is applied as follows:
protected function _getItemsData()
$attribute = $this->getAttributeModel();
/** @var MagentoCatalogSearchModelResourceModelFulltextCollection $productCollection */
$productCollection = $this->getLayer()->getProductCollection();
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$items = [];
$attributeCode = $attribute->getAttributeCode();
if ($attribute->getFrontendInput() == 'multiselect')
//echo '1<br/>';
if($this->_coreRegistry->registry('current_category'))
// echo '2<br/>';
$catId = $this->_coreRegistry->registry('current_category')->getId();
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode])) ;
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
// echo '4<br/>';
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
// $optionsFacetedData returning all attributes after filter
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
else
$catId = 'search';
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode]))
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
if (isset($optionsFacetedData['__other_docs']))
$this->hasMoreItems = $optionsFacetedData['__other_docs']['count'] > 0;
unset($optionsFacetedData['__other_docs']);
foreach ($optionsFacetedData as $value => $data)
$items[$value] = [
'label' => $this->tagFilter->filter($value),
'value' => $value,
'count' => $data['count'],
];
$items = $this->addOptionsData($items);
return $items;
Here, $productCollection->getFacetedData($this->getFilterField())
is returning data of all child category attributes. How to change this behaviour so that after applying a filter only top level category attributes are shown in filter?
magento2 layered-navigation
We have 3 levels of categories. When we go to the top-level category page, filter attributes of only parent category are shown. But when we select an attribute filter, attributes of all child categories are also shown. We are using smile elastic suite. On the first load of parent category, it gets the filter items from the following:
protected function _initItems()
parent::_initItems();
foreach ($this->_items as $item)
$applyValue = $item->getLabel();
if (($valuePos = array_search($applyValue, $this->currentFilterValue)) !== false)
$item->setIsSelected(true);
$applyValue = $this->currentFilterValue;
unset($applyValue[$valuePos]);
else
$applyValue = array_merge($this->currentFilterValue, [$applyValue]);
$item->setApplyFilterValue(array_values($applyValue));
return $this;
This is returning the filter attributes as expected. However, on applying a filter attribute, all attributes of child categories are also shown. The filter is applied as follows:
protected function _getItemsData()
$attribute = $this->getAttributeModel();
/** @var MagentoCatalogSearchModelResourceModelFulltextCollection $productCollection */
$productCollection = $this->getLayer()->getProductCollection();
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$items = [];
$attributeCode = $attribute->getAttributeCode();
if ($attribute->getFrontendInput() == 'multiselect')
//echo '1<br/>';
if($this->_coreRegistry->registry('current_category'))
// echo '2<br/>';
$catId = $this->_coreRegistry->registry('current_category')->getId();
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode])) ;
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
// echo '4<br/>';
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
// $optionsFacetedData returning all attributes after filter
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
else
$catId = 'search';
$facetSession = $this->_catalogSession->getData('multiselect_facets');
if(isset($facetSession[$catId][$attributeCode]) && isset($_GET[$attributeCode]))
$optionsFacetedData = $facetSession[$catId][$attributeCode];
else
$optionsFacetedData = $productCollection->getFacetedData($this->getFilterField());
$facetArray = $facetSession;
$facetArray[$catId][$attributeCode] = $optionsFacetedData;
$this->_catalogSession->setData('multiselect_facets', $facetArray);
if (isset($optionsFacetedData['__other_docs']))
$this->hasMoreItems = $optionsFacetedData['__other_docs']['count'] > 0;
unset($optionsFacetedData['__other_docs']);
foreach ($optionsFacetedData as $value => $data)
$items[$value] = [
'label' => $this->tagFilter->filter($value),
'value' => $value,
'count' => $data['count'],
];
$items = $this->addOptionsData($items);
return $items;
Here, $productCollection->getFacetedData($this->getFilterField())
is returning data of all child category attributes. How to change this behaviour so that after applying a filter only top level category attributes are shown in filter?
magento2 layered-navigation
magento2 layered-navigation
edited Jun 20 at 5:50
Sufyan Khot
asked Jun 19 at 11:19
Sufyan KhotSufyan Khot
17512 bronze badges
17512 bronze badges
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "479"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f278858%2fshow-filter-attributes-only-for-top-category%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f278858%2fshow-filter-attributes-only-for-top-category%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown