Пошук у каталозі: Якщо ви отримаєте лише один результат, покажіть сторінку перегляду товару, переглянуту список перегляду


14

Моя мета - досягти наступних змін у пошуку каталогу Magento.

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

Чи можете ви дати мені пораду, як і де я повинен почати пошук, щоб зробити цю модифікацію?

На даний момент я справді загубився у цілій партії коду.

Використання Magento 1.9.0.1

Відповіді:


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.