Wyszukiwanie w katalogu: jeśli jest tylko jeden wynik, pokaż stronę widoku produktu zamiast widoku listy


14

Moim celem jest osiągnięcie następującej modyfikacji w wyszukiwaniu w katalogu Magento.

Kiedy szukam produktu i tylko jeden produkt jest zwracany w kolekcji wyników, chcę wyświetlić stronę widoku produktu zamiast strony listy produktów.

Czy możesz mi doradzić, jak i gdzie powinienem zacząć szukać tej modyfikacji?

W tej chwili jestem naprawdę zagubiony w całym tym kodzie.

Korzystanie z Magento 1.9.0.1

Odpowiedzi:


21

Przed renderowaniem strony szybkiego wyszukiwania (lub wyszukiwania zaawansowanego) należy utworzyć nowe rozszerzenie, które sprawdza, czy kolekcja produktów zawiera dokładnie jeden produkt.
W tym celu stwórzmy nowe rozszerzenie o nazwie StackExchange_CatalogSearch.
Konieczne będą następujące pliki:

app/etc/modules/StackExchange_CatalogSearch.xml - plik deklaracji

<?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 - plik konfiguracyjny:

<?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 - obserwator, który wykonuje całą pracę.

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

Wyczyść pamięć podręczną, wyłącz kompilację, jeśli jest włączona, i spróbuj.

Uwaga: to rozszerzenie przekierowuje na stronę produktu, gdy strona wyszukiwania (i wyszukiwania zaawansowanego) powinna powrócić tylko do produktu, nawet jeśli dzieje się to po wyszukiwaniu lub po zastosowaniu warstwowego filtru nawigacji.


Wow świetnie, to działa jak urok! Dziękuję Ci bardzo!
Marco

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.