如何将分层导航添加到高级搜索结果页面?
Magento 1.7版。
答案 0 :(得分:8)
下面的补丁将在高级搜索结果中显示分层导航,并且可以通过分层导航正常工作。 分层导航和搜索结果基于两个单独的产品集合显示,一个由 catalogsearch / Model / Layer.php 创建,另一个由 catalogsearch / Model / Advanced.php 创建。 因此,我们需要覆盖这两个模型的几个函数,以使分层导航工作在高级搜索中。
1-在 catalogsearch_advanced_result 标记下的local.xml中添加。
<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;
}
使用
覆盖getsearch产品的getProductCollection,getSearchCriterias函数/ model / model.phppublic 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;
}
答案 1 :(得分:5)
没有快速解决方案。标准搜索和高级搜索使用两种不同的方法进行搜索。
如果您比较catalogsearch.xml
中的布局,则会看到catalogsearch_advanced_result
的版块未包含catalogsearch/layer
块。如果从catalogsearch_result_index
复制块定义并将根模板更改为3columns.phtml
,则会抛出各种错误。
答案 2 :(得分:1)
在我的1.6.2中,在将0(零)设置为系统后显示分层导航 - &gt;配置 - &gt;目录 - &gt;目录搜索 - &gt;如果搜索结果小于
,则应用分层导航答案 3 :(得分:0)
这个link去Magento网站应该有所帮助。您需要从目录创建属性。然后查看前端属性(目录&gt;属性)下的设置。
答案 4 :(得分:0)
只需在catalogsearch.xml
预先搜索结果左区域中添加以下行,这有助于我在我的EE网站上看到它,但我还没有在CE版本中检查过它。< / p>
<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>
希望它可以帮助他人。