Recherche dans le catalogue: Si un seul résultat, afficher la page de vue du produit au lieu de la vue de liste


14

Mon objectif est de réaliser la modification suivante dans la recherche de catalogue Magento.

Lorsque je recherche un produit et qu'un seul produit est renvoyé dans la collection de résultats, je souhaite afficher la page d'affichage du produit au lieu de la page de liste des produits.

Pouvez-vous me donner des conseils sur la manière et le lieu de recherche pour effectuer cette modification?

Pour le moment, je suis vraiment perdu dans tout ce code.

Utiliser Magento 1.9.0.1

Réponses:


21

Vous devez créer une nouvelle extension qui vérifie, avant d'afficher la page de recherche rapide (ou recherche avancée) si la collection de produits contient exactement un produit.
Pour cela, créons une nouvelle extension appelée StackExchange_CatalogSearch.
Vous aurez besoin des fichiers suivants:

app/etc/modules/StackExchange_CatalogSearch.xml - le dossier de déclaration

<?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 - le fichier de configuration:

<?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'observateur qui fait tout le travail.

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

Videz le cache, désactivez la compilation s'il est activé et essayez-le.

Remarque: Cette extension redirige vers la page du produit lorsque la page de recherche (et de recherche avancée) ne doit revenir que sur le produit, même si cela se produit après la recherche ou après l'application d'un filtre de navigation en couches.


Wow génial, cela fonctionne comme un charme! Merci beaucoup!
Marco

1
Pour les paresseux, téléchargez ici: github.com/sreichel/magento-StackExchange_CatalogSearch
sv3n
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.