Magento-Schnellsuche, um benutzerdefinierte Attribute mit Bedingungen zu untersuchen?

8

Ich habe eine Anforderung, bei der, wenn eine beliebige Ganzzahl in der Magento-Schnellsuchzeichenfolge vorhanden ist, eine Suche nach Produkt-SKU und benutzerdefinierten Attributen durchgeführt wird. Wenn die Suchzeichenfolge jedoch keine Ganzzahlen enthält, suchen Sie nach Produktname und Beschreibung.

Angenommen, die Abfragezeichenfolge enthält 12345, dann möchte ich eine ähnliche Suche in der Produktattribut-SKU und einigen anderen benutzerdefinierten Attributen durchführen. Wenn die Abfragezeichenfolge jedoch keine Ganzzahl enthält, möchte ich eine FULLTEXT-Suche nur im Produktnamen und in der Beschreibung durchführen. Macht Sinn?

Ich habe nachgesehen CatalogSearch/Model/Resource/Fulltext.php -> prepareResult(), kann aber nicht herausfinden, wie Ergebnisse basierend auf der Abfragezeichenfolge gefiltert werden. Bei der Schnellsuche wird auch das catalogsearch/resultModell zum Suchen verwendet, während wir hier möglicherweise nachsehen müssen catalog/product.

Ich bin verloren, jede Hilfe wäre sehr dankbar!

MagExt
quelle

Antworten:

3

Versuchen Sie, ein neues Modul zu erstellen

In Ihrer config.xml

...
<adminhtml>
    <global_search>
        <magepal_custom_attributes>
            <class>MagePal_GlobalAttributesSearch_Model_Search_Customattributes</class>
            <acl>magepal_globalattributessearch</acl>
        </magepal_custom_attributes>
    </global_search>
</adminhtml> 
    ...

in app / code / local / MagePal / GlobalAttributesSearch / Model / Search / Customattributes.php

<?php
class MagePal_GlobalAttributesSearch_Model_Search_Customattributes extends Varien_Object
{
    /**
     * Load search results
     *
     */
    public function load() {
        $arr = array();
        $searchText = $this->getQuery();


        // move code above to your if statement and do your db lookup accordingly 
        $collection = Mage::getModel('module/name')->getCollection()

         if(is_int($searchText)){
           /* search for int in product sku and custom */
            $collection->addFieldToFilter(
                array('field_name'),
                array(
                    array('like'=>'%'.$searchText.'%'), 
                    )
                );
         }
         else{
            /* search product name and description  */
            $collection->addFieldToFilter(
                array('field_name','field_name'),
                array(
                    array('like'=>'%'.$searchText.'%'),
                    array('like'=>'%'.$searchText.'%'), 
                    )
                );
         }

        $collection->load();

        foreach ($collection as $model) {
            $arr[] = array(
                'id'            => 'path/1/'.$model->getId(),
                'type'          => Mage::helper('adminhtml')->__('Custom Attributes'),
                'name'          => $model->getId(),
                'description'   => Mage::helper('core/string')->truncate('desc', 35),
                'url' => Mage::helper('adminhtml')->getUrl('*/path/edit', array('id'=>$model->getId())),
            );
        }

        $this->setResults($arr);
        return $this;
    }
}

Siehe http://blog.mattstephens.co.uk/post/27326981315/adding-custom-module-to-magentos-admin-global-search

Sie können auch den globalen Produktsuchblock neu schreiben.

Renon Stewart
quelle