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

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

Мадженто версии 1.7.


person mas    schedule 08.05.2012    source источник
comment
Вы можете проверить этот пост: stackoverflow.com/questions/13248461/   -  person ANKIT    schedule 28.02.2013


Ответы (5)


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

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

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

person Alex    schedule 13.11.2012

В моей версии 1.6.2 многоуровневая навигация появилась после установки 0 (ноль) для
Система -> Конфигурация -> Каталог -> Поиск в каталоге -> Применить многоуровневую навигацию, если результаты поиска меньше

person limex    schedule 18.02.2013

Эта ссылка ведет на веб-сайт Magento. Вам необходимо создать атрибуты из каталогов. Затем посмотрите настройки в разделе Свойства внешнего интерфейса (Каталоги>Атрибуты).

person Yogesh Nath    schedule 23.08.2012
comment
Спасибо за ссылку, хотя это не то, что я ищу. Ссылка описывает, как добавить многоуровневую навигацию на веб-сайт (что я знаю, как это сделать). Мой вопрос касается добавления многоуровневой навигации конкретно в расширенный поиск (который, кажется, игнорирует общие настройки). - person mas; 24.08.2012

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

Надеюсь, это поможет другим.

person Adarsh Khatri    schedule 06.08.2014