UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: reekor от 28 Августа 2015, 13:24:13

Название: Фильтр по товарам
Отправлено: reekor от 28 Августа 2015, 13:24:13
Всем Привет.
В ообщем задача такая:
1 Нужен фильтр в котором участвует 2 типа товаров(т.е. 2 разных @type-id)
типы в структуре располагаются следующим образом:
      1.Товар   (http://serebrina.ru/katalog/cepi/tonkie_cepi/cep_snejk14/)(@type-id 1)
         1.1. Опция товара (@type-id 2) со своими полями, например размер и имеет свой справочник relation. @type-id 2 Связано через symlink с @type-id 1.
         1.1. Опция товара (@type-id 2) -//-
Кастомно @type-id 2 не отображается в категории.

Как сделать так чтобы вывести этот фильтр по полю "размер" товара @type-id2.
2. чтоб он произвел поиск, и если в результат попадает  товар @type-шв2, то выводил родителя(@type-id1).   
вот.         

Еще не могу разобраться с макросом catalog/search, он что только выводит поля которые участвуют в фильтре?
А где взять файл который непосредственно выполняет процесс фильтрации?


Название: Re: Фильтр по товарам
Отправлено: reekor от 28 Августа 2015, 13:27:55
Если я правильно понял getObjectsList отвечает за результат, если нет поправьте меня.
Название: Re: Фильтр по товарам
Отправлено: reekor от 22 Сентября 2015, 10:29:35
Получилось e меня как-то так. это стандартный макрос getObjectsList.


   if($type_id) {
            $this->autoDetectOrders($sel, $type_id);
            $this->autoDetectFilters($sel, $type_id);
           
            if($this->isSelectionFiltered) {
               $template_block_empty = $template_block_search_empty;
               $this->isSelectionFiltered = false;
            }
            } else {
            $sel->setOrderFilter();
            $sel->setOrderByName();
         }
         
         
         
      /* ******************************************************************** */
         $data = getRequest('fields_filter');
         
         /* Определяет по какому type-id выводыить */
          if ($data) {
               if ($sel->addPropertyFilterIsNull('price')){
                 
                  $sel->addObjectType(164);
                  }
               
             }
            else {
               $sel->addObjectType(83);
            }
          /* ******************************************************************** */
         
         if($curr_page !== "all") {
            $curr_page = (int) $curr_page;
            $sel->setLimitFilter();
            $sel->addLimit($per_page, $curr_page);
         }

P.S. код в принципе выполняется как мне надо. Но если честно не совсем понимаю:"$sel->addPropertyFilterIsNull('price'))", но и без нее не работает. Если кому не сложно поясните.
Название: Re: Фильтр по товарам
Отправлено: Aisamiery от 01 Октября 2015, 15:46:02
P.S. код в принципе выполняется как мне надо. Но если честно не совсем понимаю:"$sel->addPropertyFilterIsNull('price'))", но и без нее не работает. Если кому не сложно поясните.

Думаю по названию метода, он проверяет чтоб поле Цена было пустое
Название: Re: Фильтр по товарам
Отправлено: Aisamiery от 01 Октября 2015, 15:48:06
Мне чтоб решить такую же задачу, пришлось переписать кучу системных макросов ))
Так как мне нужно работать с товаром типа type-id2, а выводить везде type-id1 ))
Название: Re: Фильтр по товарам
Отправлено: crazygeorgio от 03 Октября 2015, 01:46:37
catalog/search выводит фильтр по полям для которых стоит галочка "Фильтруемо" в настройках шаблонов данных, сами поля берутся из типа данных наиболее часто встречающегося в данном разделе, типа если в категории 2 товара с типа1 и 3 товара типа2, то берутся данные полей типа2, это по-молчанию, так-же можно и явно задать тип данных в самом макросе catalog/search см. http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/katalog/catalog_search/

2. берешь, получаешь все страница которые попали в воронку фильтра, проходишься по всем и составляешь массив из родительских id, потом просеиваешь массив на уникальность и выводишь то что тебе нужно, по каждому родителю