Katalog Arama: Yalnızca bir sonuç varsa, liste görünümündeki ürün görünümü sayfasını göster


14

Amacım Magento katalog aramasında aşağıdaki değişikliği yapmak.

Bir ürünü aradığımda ve sonuç koleksiyonunda yalnızca bir ürün döndüğümde, ürün listesi sayfası yerine ürün görünümü sayfasında görüntülemek istiyorum.

Bana bu değişikliği yapmak için nasıl ve nerede arama yapmaya başlamam gerektiği konusunda tavsiyede bulunabilir misiniz?

Şu anda bu kod kodunda gerçekten kayboldum.

Magento 1.9.0.1 Kullanımı

Yanıtlar:


21

Ürün koleksiyonu tam olarak bir ürün içeriyorsa, hızlı arama (veya gelişmiş arama) sayfasını görüntülemeden önce kontrol eden yeni bir uzantı oluşturmanız gerekir.
Bunun için yeni bir uzantı oluşturalım StackExchange_CatalogSearch.
Aşağıdaki dosyaları kullanmanız gerekir:

app/etc/modules/StackExchange_CatalogSearch.xml - beyan dosyası

<?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 - yapılandırma dosyası:

<?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 - tüm işi yapan gözlemci.

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

Önbelleği temizleyin, etkinleştirildiyse derlemeyi devre dışı bırakın ve bir deneyin.

Not: Bu uzantı, aramadan (ve gelişmiş arama) sayfanın, aramadan sonra veya katmanlı bir gezinme filtresi uygulandıktan sonra bile yalnızca ürüne dönmesi gerektiğinde ürün sayfasına yönlendirir.


Harika, bu bir cazibe gibi çalışıyor! Çok teşekkür ederim!
Marco

1
Tembel olanlar için, buradan indirin: github.com/sreichel/magento-StackExchange_CatalogSearch
sv3n
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.