Фильтрация в mFilter2 по модификациям msOptionsPrice2

Привет!

Хочу сделать, чтобы фильтр по цене учитывал стоимость модификаций товара (msOptionsPrice2).

В описании к дополнению msOptionsPrice2 есть такая наводка:

Для вывода слайдера цен с учетом модификаций необходимо положить кастомный класс фильтрации в папку и указать в настройке mse2_filters_handler_class класс msopFilters
Поделитесь кодом класса, пожалуйста, если у кого-то есть.
Мартин Очоа
23 июня 2019, 01:30
modx.pro
1
906
0

Комментарии: 15

Мартин Очоа
23 июня 2019, 19:00
0
Может хотя бы есть пример кастомного класса фильтрации, но не по модификациям?
    Андрей
    24 июня 2019, 02:25
    0
    Класс лежит здесь — core/components/msoptionsprice/custom/msopfilters.class.php
      Мартин Очоа
      24 июня 2019, 15:33
      0
      Спасибо! Обожаю документацию на modstore :)
    webmagnit
    22 сентября 2019, 15:28
    0
    Здравствуйте. Тестирую фильтрацию в mFilter2 по модификациям msOptionsPrice2.

    Хостинг modhost.pro
    MODX Revolution 2.7.1-pl
    Версия PHP 7.1
    miniShop2 — 2.5.0-pl
    mSearch2 — 1.13.2-pl
    msOptionsPrice2 — 2.5.20-beta
    pdoTools — 2.12.3-pl

    Создал опции товаров (miniShop2):
    option-01, option-02, option-03
    Тип свойства «Список с автодополнением»


    В шаблоне категории:

    [[!msOptionsPrice.initialize?]]
    [[!mFilter2?
    &limit=`5`
    &parents=``
    &element=`msProducts`
    &class=`msProduct`
    &setMeta=`1`
    &filters=`
    msop|option-01,
    msop|option-02,
    msop|option-03,
    msop|price:number
    `
    &tplOuter=`tpl.mFilter2.outer`
    &tpls=`tpl.msProducts.row,tpl.msProducts.row`
    &sort=`ms|price:desc`

    &tplFilter.outer.msop|option-01=`tpl.mFilter2.filter.select`
    &tplFilter.row.msop|option-01=`tpl.mFilter2.filter.option`
    &tplFilter.outer.msop|option-02=`tpl.mFilter2.filter.select`
    &tplFilter.row.msop|option-02=`tpl.mFilter2.filter.option`
    &tplFilter.outer.msop|option-03=`tpl.mFilter2.filter.select`
    &tplFilter.row.msop|option-03=`tpl.mFilter2.filter.option`
    &tplFilter.outer.msop|price=`tpl.mFilter2.filter.slider`
    &tplFilter.row.msop|price=`tpl.mFilter2.filter.number`
    ]]


    У товаров в модификациях (msOptionsPrice2) прописано:
    Product-01:
    модификация 1:
    Option-01 Ford
    Option-02 Focus
    Option-03 2001,2002,2003

    Модификация 2:
    Option-01 Hyundai
    Option-02 Accent
    Option-03 2002,2003,2004

    Product-02:
    модификация 1:
    Option-01 Audi
    Option-02 100
    Option-03 2001,2002,2003

    Модификация 2:
    Option-01 BMW
    Option-02 3
    Option-03 2002,2003,2004


    Скопировал файл msopfilters.class.php в папку /core/components/msearch2/custom/filters


    В системных настройках msearch2 указал Класс-обработчик фильтров «msopFilters»


    В системных настройках msoptionsprice указал Активные опции модификаций «option-01,option-02,option-03»


    В итоге:
    Фильтр (mFilter2) по модификациям (msOptionsPrice2) пустой

    В журнале ошибок
    [2019-09-22 14:14:58] (ERROR @ /core/components/msearch2/custom/filters/msopfilters.class.php: 52) [mSearch2] Error on get filter params.
    Query: SELECT msProductData.id, msopModification.option-01, msopModification.option-02, msopModification.option-03, msopModification.price FROM `modx_ms2_products` AS `msProductData` LEFT JOIN `modx_msop_modifications` `msopModification` ON msProductData.id = msopModification.rid AND msopModification.type = 1 AND msopModification.active = 1 WHERE `msProductData`.`id` IN (3,4) GROUP BY msopModification.id
    Response: Array
    (
    [0] => 42S22
    [1] => 1054
    [2] => Unknown column 'msopModification.option' in 'field list'
    )

    Подскажите, что я сделал неправильно?
      Володя
      23 сентября 2019, 06:51
      0
      Подскажите, что я сделал неправильно?
      Опции модификаций лежат в отдельной таблице.
      &filters=`
      msopoption|option-01,
      msopoption|option-02,
      msopoption|option-03,
      msop|price:number
      `
        jstart
        jstart
        11 июля 2020, 19:07
        +1
        Всё сделал по инструкции, как у вас, но не выводит цены.
        Такое чувство он не видит.
        Размеры выводит, а вот цены нет.
        Документация полная или только для избранных?
        Фильтрация нету и не отображается.
          Rost
          Rost
          11 июля 2020, 23:47
          +1
          Решение
          [[!mFilter2?
          &paginator=`pdoPage`
          &includeTVs=`HitsPage`
          &sort=`resource|pagetitle:asc, tv|HitsPage:asc`  
          &class=`msProduct`
          &element=`msProducts`
          &setMeta=`1`
          &parents=`[[*id]]`
          &tplOuter=`tpl.mFilter2.sorting-catalog-view`
          &tpls=`tpl_default,tpl_list,tpl_table`
          &aliases=`ms|price==price, tv|HitsPage==HitsPage`
          &filters=`msoption|size, msoption|height-tovar, msoption|color-needle, msoption|Diameter-tovar, msop|price:number, ms|vendor:vendors`
          &class=`msProduct`
          &tplFilter.outer.msop|price=`tpl.mFilter2.filter.slider`
          &tplFilter.row.msop|price=`tpl.mFilter2.filter.number`
          &tplFilter.row.msoption|height-tovar=`tpl.mFilter2.filter.checkbox`
          ]]
      Максим
      17 ноября 2019, 20:28
      0
      Если писать вот так, то блок-фильтр с ценой просто исчезает.
      ,'filters' => '
      			msop|price:number
      		'
      		,'aliases' => '
      			msop|price          == price
      		'
      Если писать ms|price, то блок-фильтр отображается.
      Кастомный класс скопирован в папку (msopfilters.class.php) и прописан в настройках.
      В логах ошибок нет.
        Andrew
        25 февраля 2020, 18:02
        0
        Аналогичная проблема с фильтрами, если писать в вызове сниппета так, то всё выводится только не учитывает модификации:
        ms|price:number,
        ms|vendor:vendors,
        а если прописать вот так, то слайдер цены и производитель вообще пропадают:
        msop|price:number,
        msop|vendor:vendors,
        подскажите пожалуйста, как решается такой затык?
        всё остальное вроде работает правильно, только фильтры не могу настроить…
          Andrew
          26 февраля 2020, 07:10
          0
          Вопрос закрыт. Цены модификаций теперь включаются в слайдер цен. Спиппет теперь выглядит так:
          {$_modx->runSnippet('!mFilter2', [
          	'paginator'=>'pdoPage',
          	'class'=>'msProduct',
          	'element'=>'msProducts',
          	'setMeta'=>1,
          	'includeThumbs'=>'medium',
          	'parents'=>$_modx->resource.id,	
          	'tplOuter'=>'@FILE chunks/tpl_mFilter2Outer.tpl',
          	'tpls'=>'@FILE chunks/tpl_gridProduct.tpl, @FILE chunks/tpl_listProduct.tpl',
          
          	'limit'=>12,
          	'sort'=>'resource|menuindex:asc',
          	'aliases'=>'
          	msop|price==price,
          	ms|vendor==vendor,
          	msoption|availability==availability,
          	
          	',
          	'filters'=>'
          	msop|price:number,
          	ms|vendor:vendors,
          	msoption|availability:default,	
          	',
          	'tplFilter.outer.price'=>'tpl.mFilter2.filter.slider',
          	'tplFilter.row.price'=>'tpl.mFilter2.filter.number'		
          ])}
          Теперь другой вопрос появился.
          Так понимаю, слайдер цен с модификациями не подхватывает цены товаров без модификаций.
          В категориях есть товары с модификациями и без. Можно как-то включить что-бы в слайдер цен подхватывались и цены товаров без модификаций?
            Rost
            Rost
            11 июля 2020, 18:35
            +1
            Вы нашли решение по поводу цен?
              jstart
              jstart
              11 июля 2020, 19:15
              0
              Как видешь не кто не знает, если да же автор плагина молчит и не знает.
                Andrew
                21 июля 2020, 08:54
                0
                Да, оказалось все работает из коробки) Автор плагина что-то там пошаманил и вуаля.
              Impulse
              03 июня 2020, 15:33
              0
              Всем привет, подскажите в чем может быть затык, класс msopfilters.class.php скопировал в папку, я правильно понял что его нужно подключать в настройках mFilter: mse2_filters_handler_class
              И вот такая ошибка в логе вылезла

              [mSearch2] Method «getMsopValues» not exists in class «mse2FiltersHandler». Could not retrieve filters from «msop»
                jstart
                jstart
                11 июля 2020, 19:04
                0
                Кто-то нашёл ответ?
                Всё сделал, а цены не отображаются, уже неделю маюсь.
                😔
                Такое чувство автор знает о проблеме, но не решил её (
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  15