11/25/2011

How to add search by category in magento mini search



There is no free extension in magento commerce which will help you to search your store with particular category. I tried from myself and able to do, I am sharing my exprerience here with.

First create the drop down list of all category in form.mini.phtml

<select name="category" id="category_search_field">

<option value="">-- Any Category --</option>

<?php foreach ($catalog->getStoreCategories() as $_category): ?>

<?php if($_category->hasChildren()): ?>

<option class="parent-cat" value="<?php echo $_category->getId(); ?>"><?php echo $_category->getName();?></option>

<?php foreach ($_category->getChildren() as $subcategory):

if($subcategory->getIsActive()) : ?>

<option value="<?php echo $subcategory->getId(); ?>"<?php echo ($this->getRequest()->getQuery('category') == $subcategory->getId() ? ' selected="selected"': "") ?>><?php echo $subcategory->getName(); ?></option>

<?php endif; endforeach; ?>

<?php elseif($_category->getIsActive()): ?>

<option value="<?php echo $_category->getId(); ?>"><?php echo $_category->getName();?></option>

<?php endif; ?>

<?php endforeach ?>

</select>

Now go to app/code/core/Mage/CatalogSearch/Helper and open the Data.php and add the below code

public function getStoreCategories()

{

$helper = Mage::helper('catalog/category');

return $helper->getStoreCategories();

}

public function getSelectedCategory()

{

$catid = (int)addslashes($_REQUEST['category']);

$cat="";

if($catid>1)

$cat = Mage::getModel('catalog/category')->load($catid);

return $cat;

}

Now go to app/code/core/Mage/CatalogSearch/Model and open the Layer.php

replace

public function prepareProductCollection($collection)

{

$collection

->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())

->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText())

->setStore(Mage::app()->getStore())

->addMinimalPrice()

->addFinalPrice()

->addTaxPercents()

->addStoreFilter()

->addUrlRewrite();

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);

Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);

return $this;

}

with

public function prepareProductCollection($collection)

{

if(Mage::helper('catalogsearch')->getSelectedCategory()!="")

{

$collection

->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())

->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText())

->setStore(Mage::app()->getStore())

->addMinimalPrice()

->addFinalPrice()

->addTaxPercents()

->addStoreFilter()

->addCategoryFilter(Mage::helper('catalogsearch')->getSelectedCategory())

->addUrlRewrite();

}

else

{

$collection

->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())

->addSearchFilter(Mage::helper('catalogsearch')->getQuery()->getQueryText())

->setStore(Mage::app()->getStore())

->addMinimalPrice()

->addFinalPrice()

->addTaxPercents()

->addStoreFilter()

->addUrlRewrite();

}

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);

Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);

return $this;

}

save and Enjoy.

No comments:

Post a Comment