- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
How to add/integrate category search in advanced search?
How to add/integrate category search in advanced search in magento 2?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: How to add/integrate category search in advanced search?
Did you figure this out? Does Magento2 allow searching of category data in the keyword search? My install isn't returning category search results.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: How to add/integrate category search in advanced search?
To add this, you will need to override the following files:
vendor/magento/core/module-catalog-search/Block/Advanced/Form.php vendor/magento/core/module-catalog-search/Model/Advanced.php vendor/magento/module-catalog-search/view/frontend/templates/advanced/form.phtml
At below code in Form.php, add:
protected $_categoryHelper; public function __construct( \Magento\Catalog\Helper\Category $categoryHelper ) { $this->_categoryHelper = $categoryHelper; }
Add below function in Form.php:
public function getStoreCategories() { return $this->_categoryHelper->getStoreCategories(); }
In Advanced.php, replace the getSearchCriterias() function with the code below:
public function getSearchCriterias() { $search = $this->_searchCriterias; /* display category filtering criteria */ if(isset($_GET['cat']) && is_numeric($_GET['cat'])) { $category = $this->_objectManager->get('Magento\Catalog\Model\Category')->load($_GET['cat']); $search[] = array('name'=>'cat','value'=>$category->getName()); } return $search; }
replace getProductCollection() function, with:
public function getProductCollection() { if ($this->_productCollection === null) { $this->_productCollection = $this->_objectManager->get('Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection') ->addAttributeToSelect($this->_objectManager->get('Magento\Catalog\Model\Config')->getProductAttributes()) ->addMinimalPrice() ->addStoreFilter(); /* need to include product active and visibility filtering here*/ /* include category filtering */ if(isset($_GET['cat']) && is_numeric($_GET['cat'])) $this->_productCollection->addCategoryFilter($this->_objectManager->get('Magento\Catalog\Model\Category')->load($_GET['cat']),true); } return $this->_productCollection; }
Now search this function addFilters. In this function you can see following condition code,
if ($allConditions)
Replace above with following code:
if ($allConditions || (isset($values['cat']) && is_numeric($values['cat'])) )
In form.phtml, after endforeach line add below code:
<li> <label for="category_search_field">Search by Category:</label> <select name="cat" id="category_search_field"> <option value="">-- Any Category --</option> <?php foreach ($this->getStoreCategories() as $_category): ?> <?php if($_category->hasChildren()): ?> <option class="parent-cat" value="<?php echo $_category->getId(); ?>"><?php echo $_category->getName();?></option> <?php if($_category->getIsActive()) : ?> <option value="<?php echo $_category->getId(); ?>"<?php echo ($this->getRequest()->getQuery('cat') == $_category->getId() ? ' selected="selected"': "") ?>><?php echo $_category->getName(); ?></option> <?php endif; ?> <?php elseif($_category->getIsActive()): ?> <option value="<?php echo $_category->getId(); ?>"><?php echo $_category->getName();?></option> <?php endif; ?> <?php endforeach ?> </select> </li>
Now You can see category filter in Advanced Search.
Issue resolved?
Please click on Kudos & Accept as Solution!