Bạn cần tạo một tiện ích mở rộng mới để kiểm tra, trước khi hiển thị trang tìm kiếm nhanh (hoặc tìm kiếm nâng cao) nếu bộ sưu tập sản phẩm chứa chính xác một sản phẩm.
Đối với điều này, hãy tạo một phần mở rộng mới được gọi là StackExchange_CatalogSearch
.
Bạn sẽ cần phải theo dõi các tập tin sau:
app/etc/modules/StackExchange_CatalogSearch.xml
- hồ sơ khai
<?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
- tập tin cấu hình:
<?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
- người quan sát làm tất cả công việc.
<?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
}
}
}
}
}
Xóa bộ nhớ cache, vô hiệu hóa biên dịch nếu được bật và cho nó đi.
Lưu ý: Tiện ích mở rộng này chuyển hướng đến trang sản phẩm khi trang tìm kiếm (và tìm kiếm nâng cao) chỉ quay lại trên sản phẩm, ngay cả khi điều này xảy ra sau khi tìm kiếm hoặc sau khi áp dụng bộ lọc điều hướng lớp.