Katalogsuche: Wenn nur ein Ergebnis vorhanden ist, wird die Produktansichtsseite der Listenansicht angezeigt

14

Mein Ziel ist es, die folgende Änderung in der Magento-Katalogsuche zu erreichen.

Wenn ich nach einem Produkt suche und nur ein Produkt in der Ergebnissammlung zurückgegeben wird, möchte ich statt der Seite mit der Produktliste die Seite mit der Produktansicht anzeigen.

Können Sie mir einen Rat geben, wie und wo ich mit der Suche nach dieser Änderung beginnen soll?

Im Moment bin ich wirklich in dieser ganzen Menge Code verloren.

Verwendung von Magento 1.9.0.1

Marco
quelle

Antworten:

21

Sie müssen eine neue Erweiterung erstellen, die vor dem Rendern der Seite für die Schnellsuche (oder erweiterte Suche) überprüft, ob die Produktsammlung genau ein Produkt enthält.
Dazu erstellen wir eine neue Erweiterung mit dem Namen StackExchange_CatalogSearch.
Sie benötigen folgende Dateien:

app/etc/modules/StackExchange_CatalogSearch.xml - die Anmeldedatei

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_CatalogSearch>
            <codePool>local</codePool>
            <active>true</active>
            <depends>
                <Mage_CatalogSearch />
            </depends>
        </StackExchange_CatalogSearch>
    </modules>
</config>

app/code/local/StackExchange/CatalogSearch/etc/config.xml - die Konfigurationsdatei:

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_CatalogSearch>
            <version>1.0.0</version>
        </StackExchange_CatalogSearch>
    </modules>
    <global>
        <models>
            <stackexchange_catalogsearch>
                <class>StackExchange_CatalogSearch_Model</class>
            </stackexchange_catalogsearch>
        </models>
    </global>
    <frontend>
        <events>
            <controller_action_layout_render_before_catalogsearch_result_index><!-- for the quick search-->
                <observers>
                    <stackexchange_catalogsearch>
                        <model>stackexchange_catalogsearch/observer</model>
                        <method>redirectToProduct</method>
                    </stackexchange_catalogsearch>
                </observers>
            </controller_action_layout_render_before_catalogsearch_result_index>
            <controller_action_layout_render_before_catalogsearch_advanced_result><!-- for the advanced search-->
                <observers>
                    <stackexchange_catalogsearch>
                        <model>stackexchange_catalogsearch/observer</model>
                        <method>redirectToProduct</method>
                    </stackexchange_catalogsearch>
                </observers>
            </controller_action_layout_render_before_catalogsearch_advanced_result>
        </events>
    </frontend>
</config>

app/code/local/StackExchange/CatalogSearch/Model/Observer.php - der Beobachter, der die ganze Arbeit macht.

<?php
class StackExchange_CatalogSearch_Model_Observer
{
    //the product list block name in layout
    const RESULT_BLOCK_NAME = 'search_result_list';
    public function redirectToProduct($observer)
    {
        /** @var Mage_Catalog_Block_Product_List $block */
        $block = Mage::app()->getLayout()->getBlock(self::RESULT_BLOCK_NAME);
        if ($block) {
            $collection = $block->getLoadedProductCollection();
            if ($collection && $collection->getSize() == 1) {
                /** @var Mage_Catalog_Model_Product $product */
                $product = $collection->getFirstItem();
                $url = $product->getProductUrl();
                if ($url){
                    Mage::app()->getResponse()->setRedirect($url);
                    Mage::app()->getResponse()->sendResponse();
                    exit; //stop everything else
                }
            }
        }
    }
}

Leeren Sie den Cache, deaktivieren Sie die Kompilierung, falls aktiviert, und probieren Sie es aus.

Hinweis: Diese Erweiterung leitet zur Produktseite weiter, wenn die Suchseite (und die erweiterte Suche) nur für das Produkt angezeigt werden sollen, auch wenn dies nach der Suche oder nach Anwendung eines mehrschichtigen Navigationsfilters geschieht.

Marius
quelle
Wow toll, das funktioniert wie ein Zauber! Vielen Dank!
Marco,
1
Für die Faulen hier herunterladen: github.com/sreichel/magento-StackExchange_CatalogSearch
sv3n