Búsqueda en el catálogo: si solo hay un resultado, muestre la página de vista del producto en lugar de la vista de lista

14

Mi objetivo es lograr la siguiente modificación en la búsqueda del catálogo de Magento.

Cuando busco un producto y solo se devuelve un producto en la colección de resultados, quiero mostrarlo en la página de vista del producto en lugar de la página de la lista de productos.

¿Me puede dar un consejo sobre cómo y dónde debo comenzar a buscar para hacer esta modificación?

Por el momento estoy realmente perdido en todo este código.

Usando Magento 1.9.0.1

Marco
fuente

Respuestas:

21

Debe crear una nueva extensión que verifique, antes de mostrar la página de búsqueda rápida (o búsqueda avanzada) si la colección de productos contiene exactamente un producto.
Para esto creemos una nueva extensión llamada StackExchange_CatalogSearch.
Necesitará los siguientes archivos:

app/etc/modules/StackExchange_CatalogSearch.xml - el archivo de declaración

<?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 - el archivo de configuración:

<?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 - El observador que hace todo el trabajo.

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

Borre el caché, desactive la compilación si está habilitado y pruébelo.

Nota: Esta extensión redirige a la página del producto cuando la página de búsqueda (y búsqueda avanzada) debe regresar solo en el producto, incluso si esto sucede después de la búsqueda o después de aplicar un filtro de navegación en capas.

Marius
fuente
Wow genial, esto funciona como un encanto! ¡Muchas gracias!
Marco
1
Para los perezosos, descargue aquí: github.com/sreichel/magento-StackExchange_CatalogSearch
sv3n