Ricerca nel catalogo: se solo un risultato, mostra la pagina di visualizzazione del prodotto installata nella vista elenco


14

Il mio obiettivo è ottenere la seguente modifica nella ricerca del catalogo Magento.

Quando cerco un prodotto e nella raccolta dei risultati viene restituito un solo prodotto, desidero visualizzare la pagina di visualizzazione del prodotto anziché la pagina dell'elenco dei prodotti.

Potete darmi un consiglio come e dove dovrei iniziare la ricerca per fare questa modifica?

Al momento sono davvero perso in tutto questo codice.

Utilizzo di Magento 1.9.0.1

Risposte:


21

È necessario creare una nuova estensione che controlli, prima di eseguire il rendering della pagina di ricerca rapida (o ricerca avanzata) se la raccolta di prodotti contiene esattamente un prodotto.
Per questo creiamo una nuova estensione chiamata StackExchange_CatalogSearch.
Sarà necessario i seguenti file:

app/etc/modules/StackExchange_CatalogSearch.xml - il file di dichiarazione

<?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 - il file di configurazione:

<?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 - l'osservatore che fa tutto il lavoro.

<?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
                }
            }
        }
    }
}

Svuota la cache, disabilita la compilazione se abilitata e provaci.

Nota: questa estensione reindirizza alla pagina del prodotto quando la pagina di ricerca (e ricerca avanzata) deve tornare solo sul prodotto, anche se ciò si verifica dopo la ricerca o dopo aver applicato un filtro di navigazione a più livelli.


Caspita, funziona come un incantesimo! Grazie mille!
Marco,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.