高度な検索結果ページにレイヤード ナビゲーションを追加するにはどうすればよいですか?
マジェント バージョン 1.7。
以下のパッチは、高度な検索結果に階層化されたナビゲーションを表示し、階層化されたナビゲーションで正常に機能します。階層化されたナビゲーションと検索結果は、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;
}
これに対する迅速な解決策はありません。標準検索と詳細検索では、2 つの異なる検索方法が使用されます。
のレイアウトを比較すると、ブロックが含まれていないcatalogsearch.xml
ことがわかります。からブロック定義をコピーしてルート テンプレートを変更すると、さまざまなエラーがスローされます。catalogsearch_advanced_result
catalogsearch/layer
catalogsearch_result_index
3columns.phtml
このリンクは Magento Web サイトに移動します が役立ちます。カタログから属性を作成する必要があります。次に、[フロントエンド プロパティ] ([カタログ] > [属性]) の設定を確認します。
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>
それが他の人に役立つことを願っています。