Поиск по каталогу: если только один результат, показать страницу представления продукта, отображенную в виде списка

14

Моя цель - добиться следующей модификации в поиске по каталогу Magento.

Когда я ищу продукт и в коллекции результатов возвращается только один продукт, я хочу отобразить страницу просмотра продукта вместо страницы списка продуктов.

Можете ли вы дать мне совет, как и где я должен начать поиск, чтобы сделать эту модификацию?

На данный момент я действительно потерян в этом большом количестве кода.

Использование Magento 1.9.0.1

Marco
источник

Ответы:

21

Вам необходимо создать новое расширение, которое проверяет перед отображением страницы быстрого поиска (или расширенного поиска), содержит ли коллекция продуктов ровно один продукт.
Для этого давайте создадим новое расширение с именем StackExchange_CatalogSearch.
Вам понадобятся следующие файлы:

app/etc/modules/StackExchange_CatalogSearch.xml - файл декларации

<?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 - файл конфигурации:

<?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 - наблюдатель, который делает всю работу.

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

Очистите кеш, отключите компиляцию, если она включена, и попробуйте.

Примечание. Это расширение перенаправляет на страницу продукта, когда страница поиска (и расширенный поиск) должна возвращаться только по продукту, даже если это происходит после поиска или после применения многоуровневого фильтра навигации.

Мариус
источник
Вау здорово, это работает как шарм! Большое спасибо!
Марко
1
Для ленивых загрузите здесь: github.com/sreichel/magento-StackExchange_CatalogSearch
sv3n