2012-05-08 3 views
7

Как добавить слоистую навигацию в страницы результатов расширенного поиска?Magento - Как добавить многоуровневую навигацию к расширенному поиску?

Magento Version 1.7.

+0

Вы можете проверить этот пост: http://stackoverflow.com/questions/13248461/magento-layered-navigation-on-advanced-search-results/15128386#15128386 – ANKIT

ответ

0

Этот link отправляется на сайт Magento, чтобы помочь. Вам необходимо создать атрибуты из Каталогов. Затем см. Настройки в разделе «Свойства интерфейса» («Каталоги»> «Атрибуты»).

+0

Спасибо за вашу ссылку, хотя это не то, что я ищу. Ссылка описывает, как добавить многоуровневую навигацию к веб-сайту (что я знаю, как это сделать). Я задаю вопрос о том, как конкретно добавить Layered Navigation в ** Advanced Search ** (который, как представляется, игнорирует общие настройки). – mas

5

Для этого нет быстрого решения. Стандартный поиск и расширенный поиск используют два разных метода поиска.

Если вы сравниваете макеты в catalogsearch.xml, вы увидите, что для catalogsearch_advanced_result блок catalogsearch/layer не включен. Если вы скопируете определение блока с catalogsearch_result_index и измените корень шаблона на 3columns.phtml, будут сброшены различные ошибки.

1

В моих 1.6.2 слоистых нав появился после установки 0 (ноля) в
System -> Configuration -> Каталог -> Каталог Поиск -> Применить Многоуровневую навигацию, если результаты поиска меньше, чем

0

Просто добавив следующую строку в 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> 

Надеется, что это помогает другим.

7

Патч ниже отобразит многоуровневую навигацию в расширенном поиске и будет отлично работать со слоистыми навигациями. Слойная навигация и результат поиска отображаются на основе двух отдельных коллекций продуктов, один из которых создан по каталогу /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; 
} 
Смежные вопросы