ค้นหาแคตตาล็อก: หากมีเพียงผลลัพธ์เดียวให้แสดงหน้ามุมมองผลิตภัณฑ์ที่ใส่ไว้ในมุมมองรายการ


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

ล้างแคชปิดใช้งานการคอมไพล์หากเปิดใช้งานและปล่อยทิ้งไว้

หมายเหตุ:ส่วนขยายนี้จะเปลี่ยนเส้นทางไปยังหน้าผลิตภัณฑ์เมื่อหน้าการค้นหา (และการค้นหาขั้นสูง) ควรกลับมาที่ผลิตภัณฑ์เท่านั้นแม้ว่าจะเกิดขึ้นหลังจากการค้นหาหรือหลังจากใช้ตัวกรองการนำทางแบบเลเยอร์


ว้าวเยี่ยมมากมันใช้งานได้อย่างมีเสน่ห์! ขอบคุณมาก!
Marco

1
สำหรับคนขี้เกียจดาวน์โหลดได้ที่นี่: github.com/sreichel/magento-StackExchange_CatalogSearch
sv3n
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.