카탈로그 검색 : 결과가 하나 인 경우 목록보기에 제품보기 페이지를 표시하십시오.


14

내 목표는 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.