Как добавить слоистую навигацию в страницы результатов расширенного поиска?Magento - Как добавить многоуровневую навигацию к расширенному поиску?
Magento Version 1.7.
Как добавить слоистую навигацию в страницы результатов расширенного поиска?Magento - Как добавить многоуровневую навигацию к расширенному поиску?
Magento Version 1.7.
Этот link отправляется на сайт Magento, чтобы помочь. Вам необходимо создать атрибуты из Каталогов. Затем см. Настройки в разделе «Свойства интерфейса» («Каталоги»> «Атрибуты»).
Спасибо за вашу ссылку, хотя это не то, что я ищу. Ссылка описывает, как добавить многоуровневую навигацию к веб-сайту (что я знаю, как это сделать). Я задаю вопрос о том, как конкретно добавить Layered Navigation в ** Advanced Search ** (который, как представляется, игнорирует общие настройки). – mas
Для этого нет быстрого решения. Стандартный поиск и расширенный поиск используют два разных метода поиска.
Если вы сравниваете макеты в catalogsearch.xml
, вы увидите, что для catalogsearch_advanced_result
блок catalogsearch/layer
не включен. Если вы скопируете определение блока с catalogsearch_result_index
и измените корень шаблона на 3columns.phtml
, будут сброшены различные ошибки.
В моих 1.6.2 слоистых нав появился после установки 0 (ноля) в
System -> Configuration -> Каталог -> Каталог Поиск -> Применить Многоуровневую навигацию, если результаты поиска меньше, чем
Просто добавив следующую строку в catalogsearch.xml
результаты предварительного поиска left область помогла мне получить ее на своем 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>
Надеется, что это помогает другим.
Патч ниже отобразит многоуровневую навигацию в расширенном поиске и будет отлично работать со слоистыми навигациями. Слойная навигация и результат поиска отображаются на основе двух отдельных коллекций продуктов, один из которых создан по каталогу /Model/Layer.php, а другой по catalogsearch/Model/Advanced.php. Поэтому нам нужно переопределить несколько функций обеих этих моделей, чтобы сделать многослойную навигацию в расширенном поиске.
1- В вашем local.xml под catalogsearch_advanced_result tag add.
<reference name="left">
<block type="catalogsearch/layer" name="catalogsearch.leftnav" after="currency" template="catalog/layer/view.phtml"/>
</reference>
Переопределение prepareProductCollection функция catalogsearch/модели/Layer.php с
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;
}
Override getProductCollection, getSearchCriterias функция catalogsearch/модели/Advanced.php с
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;
}
Вы можете проверить этот пост: http://stackoverflow.com/questions/13248461/magento-layered-navigation-on-advanced-search-results/15128386#15128386 – ANKIT