คุณต้องสร้างส่วนขยายใหม่ที่ตรวจสอบก่อนแสดงผลการค้นหาอย่างรวดเร็ว (หรือการค้นหาขั้นสูง) หากการรวบรวมผลิตภัณฑ์มีหนึ่งผลิตภัณฑ์ สำหรับการปล่อยให้เรื่องนี้สร้างส่วนขยายใหม่ที่เรียกว่า
คุณจะต้องมีไฟล์ดังต่อไปนี้: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
}
}
}
}
}
ล้างแคชปิดใช้งานการคอมไพล์หากเปิดใช้งานและปล่อยทิ้งไว้
หมายเหตุ:ส่วนขยายนี้จะเปลี่ยนเส้นทางไปยังหน้าผลิตภัณฑ์เมื่อหน้าการค้นหา (และการค้นหาขั้นสูง) ควรกลับมาที่ผลิตภัณฑ์เท่านั้นแม้ว่าจะเกิดขึ้นหลังจากการค้นหาหรือหลังจากใช้ตัวกรองการนำทางแบบเลเยอร์