Как добавить многоуровневую навигацию на страницы результатов расширенного поиска?
Мадженто версии 1.7.
Как добавить многоуровневую навигацию на страницы результатов расширенного поиска?
Мадженто версии 1.7.
Приведенный ниже патч будет отображать многоуровневую навигацию в результатах расширенного поиска и будет нормально работать с многоуровневой навигацией. Многоуровневая навигация и результаты поиска отображаются на основе двух отдельных коллекций продуктов, одна из которых создана с помощью catalogsearch/Model/Layer.php, а другая — с помощью catalogsearch/Model/Advanced.php. . Поэтому нам нужно переопределить несколько функций обеих этих моделей, чтобы многоуровневая навигация работала в расширенном поиске.
1- В файле local.xml добавьте тег catalogsearch_advanced_result.
<reference name="left">
<block type="catalogsearch/layer" name="catalogsearch.leftnav" after="currency" template="catalog/layer/view.phtml"/>
</reference>
Переопределить функцию prepareProductCollection в catalogsearch/model/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;
}
Переопределить функцию getProductCollection, getSearchCriterias в catalogsearch/model/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;
}
Для этого нет быстрого решения. Стандартный поиск и расширенный поиск используют два разных метода поиска.
Если вы сравните макеты в catalogsearch.xml
, вы увидите, что для catalogsearch_advanced_result
блок catalogsearch/layer
не включен. Если вы скопируете определение блока из catalogsearch_result_index
и измените корневой шаблон на 3columns.phtml
, возникнут различные ошибки.
В моей версии 1.6.2 многоуровневая навигация появилась после установки 0 (ноль) для
Система -> Конфигурация -> Каталог -> Поиск в каталоге -> Применить многоуровневую навигацию, если результаты поиска меньше
Эта ссылка ведет на веб-сайт Magento. Вам необходимо создать атрибуты из каталогов. Затем посмотрите настройки в разделе Свойства внешнего интерфейса (Каталоги>Атрибуты).
Простое добавление следующей строки в 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>
Надеюсь, это поможет другим.