Magento Produktsuche nur in festgelegter Kategorie / Suchfilter hinzufügen (add Filter Product Search)

Gepostet am Juli 4, 2013

Folgend möchte ich Zeigen, wie man Filter direkt in die SQL Abfrage der Suchfunktion integriert. Ab gezeigten Beispiel möchte ich, das eine Suche nur in festgelegten Kategorien stattfindet.

Folgende Datei sollte überschrieben werden:
/app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext/Collection.php

Zum Überschrieben, diese Datei in den folgenden Ordner kopieren oder über eine Extension überschreiben (wird hier nicht gezeigt):
/app/code/local/Mage/CatalogSearch/Model/Mysql4/Fulltext/Collection.php

Folgende Funktion muss erweitert werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public function addSearchFilter($query)
    {
        Mage::getSingleton('catalogsearch/fulltext')->prepareResult();
 
        $this->getSelect()->joinInner(
            array('search_result' => $this->getTable('catalogsearch/result')),
            $this->getConnection()->quoteInto(
                'search_result.product_id=e.entity_id AND search_result.query_id=?',
                $this->_getQuery()->getId()
            ),
            array('relevance' => 'relevance')
        );
 
        return $this;
    }

Beispiel Erweiterung, welche nur Artikel aus der Kategorie 73 und 76 in der Suche ausgibt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public function addSearchFilter($query)
    {
        Mage::getSingleton('catalogsearch/fulltext')->prepareResult();
 
        $this->getSelect()->joinInner(
            array('search_result' => $this->getTable('catalogsearch/result')),
            $this->getConnection()->quoteInto(
                'search_result.product_id=e.entity_id AND search_result.query_id=?',
                $this->_getQuery()->getId()
            ),
            array('relevance' => 'relevance')
        );
 
        //##### ERWEITERUNG START #######
        $this->getSelect()->joinInner(
            array('cat_category' => $this->getTable('catalog/category_product')),
            'cat_category.product_id = e.entity_id AND (cat_category.category_id = 73 or cat_category.category_id = 76)',
            array()
        );
        //##### ERWEITERUNG ENDE #######
 
        return $this;
    }

Tags: ,

Leave a Reply

 

Posts of Current Category



Facebook: