Sök i kategorier i Magento
15 Maj 2009
Magento
Jag jobbar med ett projekt just nu där jag av olika anledningar behöver begränsa sökresultatet i Magento till ett specifikt katalogträd och behöver därför modifiera sökfunktionerna att göra detta. Det jag vill är helt enkelt att användarna enbart skall få söka i den valda butikens root-träd. Det går iofs. justera i produktkonfigurationen men är väldigt tidsödande och inte praktiskt i det jobb jag nu gör.
Därför var det riktigt intressant att hitta den här artikeln som i detalj beskriver hur man lägger till en droplista med kategorier i Magentos Avancerade sök. Den är riktigt nice och helt klart något man kan använda sig av.
http://www.magentocommerce.com/wiki/how-to/how_to_add_search_by_category_to_advanced_search
Jag har utgått från denna och modiferat den så att den istället för att använda en droplistsa av kategorier helt enkelt lägger till ett kategorifiler i modellen för den avancerade sökfunktionen och sätter den aktuella rotkatalogen på den. Alltså, i filen: app/code/local/Mage/CatalogSearch/Model/Advanced.php (jag har kopierat från core-katalogen för att override’a på ett snyggt sätt) har jag ersatt getProductCollection-metoden med följande kod. Den svartmarkerade raden är mitt tillägg. Works like charm. Nu visar sökresultatet bara produkter från rootkatalogen på den store som besökare befinner sig i.
public function getProductCollection() {
if (is_null($this->_productCollection)) {
$this->_productCollection = Mage::getResourceModel(‘catalogsearch/advanced_collection’)
->addAttributeToSelect(Mage::getSingleton(‘catalog/config’)->getProductAttributes())
->addMinimalPrice()
->addStoreFilter();
Mage::getSingleton(‘catalog/product_status’)->addVisibleFilterToCollection($this->_productCollection);
Mage::getSingleton(‘catalog/product_visibility’)->addVisibleInSearchFilterToCollection($this->_productCollection);
/* include category filtering */
//if(isset($_GET['category']) && is_numeric($_GET['category']))
$this->_productCollection->addCategoryFilter(Mage::getModel(‘catalog/category’)->load(Mage::app()->getStore()->getRootCategoryId()),true);
}return $this->_productCollection;
}

Kommentera inlägget