8

高度な検索結果ページにレイヤード ナビゲーションを追加するにはどうすればよいですか?

マジェント バージョン 1.7。

4

5 に答える 5

8

以下のパッチは、高度な検索結果に階層化されたナビゲーションを表示し、階層化されたナビゲーションで正常に機能します。階層化されたナビゲーションと検索結果は、catalogsearch/Model/Layer.php によって作成された製品コレクションと、catalogsearch /Model/Advanced.phpによって作成された製品コレクションの 2 つに基づいて表示されます。そのため、高度な検索でレイヤード ナビゲーションを機能させるには、これら両方のモデルのいくつかの機能をオーバーライドする必要があります。

1- local.xml の catalogsearch_advanced_result タグの下追加します。

 <reference name="left">
      <block type="catalogsearch/layer" name="catalogsearch.leftnav" after="currency" template="catalog/layer/view.phtml"/>
 </reference>

catalogsearch/model/Layer.php の prepareProductCollection 関数をオーバーライドします

public function prepareProductCollection($collection){

    if(Mage::helper('catalogsearch')->getQuery()->getQueryText())//for normal search we get the value from query string q=searchtext
        return parent::prepareProductCollection($collection);
    else{

        $collection->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes());
        /**
         * make sure you cross check the $_REQUEST with $attributes
         */
        $attributes = Mage::getSingleton('catalog/product')->getAttributes();

        Mage::log(print_r($_REQUEST,1));
        foreach($attributes as $attribute){
            $attribute_code = $attribute->getAttributeCode();
            //Mage::log("--->>". $attribute_code);
            if($attribute_code == "price")//since i am not using price attribute
                continue;

            if (empty($_REQUEST[$attribute_code])){
                //Mage::log("nothing found--> $attribute_code");
                continue;
            }
            if(!empty($_REQUEST[$attribute_code]) && is_array($_REQUEST[$attribute_code]))
                $collection->addAttributeToFilter($attribute_code, array('in' => $_REQUEST[$attribute_code]));
            else
            if(!empty($_REQUEST[$attribute_code]))
                $collection->addAttributeToFilter($attribute_code, array('like' => "%" . $_REQUEST[$attribute_code] . "%"));
        }

        $collection->setStore(Mage::app()->getStore())
        ->addMinimalPrice()
        ->addFinalPrice()
        ->addTaxPercents()
        ->addStoreFilter()
        ->addUrlRewrite();

        //Mage::log($collection->getSelect()->__toString());

        Mage::getSingleton('catalogsearch/advanced')->prepareProductCollection($collection);    
        Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
        Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
    }

    return $this;
}

catalogsearch/model/Advanced.php の getProductCollection、getSearchCriterias 関数をオーバーライドします。

public function getProductCollection(){

    if (is_null($this->_productCollection)) {
        $this->_productCollection = Mage::getResourceModel('catalogsearch/advanced_collection')
            ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
            ->addMinimalPrice()
            ->addStoreFilter();
            Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($this->_productCollection);
            Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($this->_productCollection);

        if(isset($_GET['cat']) && is_numeric($_GET['cat'])) 
            $this->_productCollection->addCategoryFilter(Mage::getModel('catalog/category')->load($_GET['cat']),true);
    }
    return $this->_productCollection;
}

public function getSearchCriterias()
{
    $search = parent::getSearchCriterias();
    /* display category filtering criteria */
    if(isset($_GET['cat']) && is_numeric($_GET['cat'])) {
        $category = Mage::getModel('catalog/category')->load($_GET['cat']);
        $search[] = array('name'=>'Category','value'=>$category->getName());
    }
    return $search;
}
于 2014-09-02T02:17:45.017 に答える
5

これに対する迅速な解決策はありません。標準検索と詳細検索では、2 つの異なる検索方法が使用されます。

のレイアウトを比較すると、ブロックが含まれていないcatalogsearch.xmlことがわかります。からブロック定義をコピーしてルート テンプレートを変更すると、さまざまなエラーがスローされます。catalogsearch_advanced_resultcatalogsearch/layercatalogsearch_result_index3columns.phtml

于 2012-11-13T11:41:41.813 に答える
0

このリンクは Magento Web サイトに移動します が役立ちます。カタログから属性を作成する必要があります。次に、[フロントエンド プロパティ] ([カタログ] > [属性]) の設定を確認します。

于 2012-08-23T01:03:02.910 に答える
0

catalogsearch.xml事前に検索結果の左側に次の行を追加するだけで、EE サイトに表示されるようになりましたが、CE バージョンでは確認していません。

<block type="catalogsearch/layer" name="catalogsearch.leftnav" before="-" template="catalog/layer/view.phtml"/>

したがって、xml ファイルの高度な検索領域では、左側の領域全体が次のようになります。

<reference name="left">
       <block type="catalog/navigation" name="hello.leftnav" as="hello.leftnav" template="catalog/navigation/hello_left_nav-search.phtml" />
        <block type="catalog/layer_view" name="catalog.leftnav" before="-" template="catalog/layer/view.phtml"/>
    </reference>

それが他の人に役立つことを願っています。

于 2014-08-06T00:52:42.063 に答える