[mSearch2] Версия 1.13 с поддержкой плагинов ms2

Представляю вам новую версию самого популярного дополнения в modstore.pro, которая улучшает работу фильтра с дополнениями для скидок.

Как известно, mFilter2 работает напрямую с базой данных, чтобы выбирать все данные для построения фильтров максимально быстро. И если эти данные чем-то меняются перед выводом, например дополнением msDiscount, то в фильтре цены будут одни значения, а при выводе товаров — другие.

Раньше мы просто расширяли фильтр и добавляли поддержку плагинов при выборке, но в новой версии это сделано из коробки.

Итак, если вы строите фильтры по полям price или weight товаров miniShop2, то вместо прямой работы с БД, будут выбираться объекты товаров, а из них вызываться соответствующие методы getPrice и getWeight. Таким образом, цена и вес в фильтрах будут построены по тем же данным, которые выведет покупателю msProducts.

Конечно, если у вас выбирается много товаров, возможно вы заметите замедление работы фильтров. Но больших магазинов без скидок почти не бывает, так что новый функционал включен по умолчанию. Но вы всегда можете его отключить опцией &noPreciseMSFilters=`1`.

Например, создаём плагин, который добавляет 20% НДС ко всем товарам в магазине:
<?php
switch ($modx->event->name) {
    case 'msOnGetProductPrice':
        /** @var float $price */
        $values = &$modx->event->returnedValues;
        $price = isset($values['price'])
            ? $values['price']
            : $product->get('price');
        $values['price'] = round($price + ($price * .20), 2);
        break;
}
Товары у нас в базе стоят от 100 до 250 рублей.

Если новый функционал отключен, то данные в фильтре и выводе начнут расходиться на 20%


А если всё работает по умолчанию, то фильтр показывает изменённые цены:


Еще 2 изменения были предложены пользователями дополнения:

@Евгений Шеронов предложил немного улучшить поддержку параметра &pageLinkScheme сниппета pdoPage. ЧПУ навигацию в фильтр это не добавляет, но хотя бы и не ломает работу фильтра, если она активирована в pdoPage.

@Степан Прищепенко предожил сохранять переданные $scriptProperties в файле action.php, когда вызывается pdoFetch. Это позволяет передать, например, &elementsPath при вызове mSearchForm.

Новая версия уже в репозитории, можно обновляться.
Василий Наумкин
11 марта 2019, 07:21
modx.pro
6
1 995
+14

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

Wassi Wassinen
30 марта 2019, 14:06
0
Василий, привет.

После обновления валит в логах вот такое. И страницы с вызовами фильтров не отображаются:

[2019-03-30 14:03:24] (ERROR @ /core/components/pdotools/model/pdotools/pdotools.class.php : 989) Unexpected token '(' in expression, expect '.' in 4dc0604d63c2b210acf8711dab426b6e line 335, near '{$(' <- there
[2019-03-30 14:03:31] (ERROR @ /core/components/pdotools/model/pdotools/pdotools.class.php : 989) Unexpected token '(' in expression, expect '.' in 8240c4f842edfe9c5365228a5a5fbdb5 line 463, near '{$(' <- there
Что он хочет? :)
    Василий Наумкин
    30 марта 2019, 14:09
    0
    Вопрос не ко мне, выражения {$( нигде в mSearch2 нет.

    Ищи его у себя в чанках и исправляй.
      Wassi Wassinen
      30 марта 2019, 14:09
      0
      Понял, спасибо.
        Wassi Wassinen
        30 марта 2019, 14:15
        0
        Выключил Fenom на страницах — заработало. Ругался на скрипты jQuery:

        <script>$(function(){$('#dp3').datepicker();});</script>
    Wassi Wassinen
    30 марта 2019, 14:07
    -1
    А при установке выдает две ошибки:

    modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
    modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
      Василий Наумкин
      30 марта 2019, 14:09
      0
      Ну ты хоть погугли для приличия, чем этот баян писать.
        Wassi Wassinen
        30 марта 2019, 14:10
        0
        Спасибо, с баянами попробую разобраться. Вот это не смог нагуглить. Подскажи куда копать:

        [2019-03-30 14:08:13] (ERROR @ /var/www/pishi.pro/www/core/xpdo/om/xpdoobject.class.php : 1452) Error HY000 executing statement:
        INSERT INTO `modx_session` (`id`, `access`, `data`) VALUES ('95e4a1178e37a321dfaf63f3baedee08', 1553944093, 'modx.user.contextTokens|a:0:{}modx.user.0.resourceGroups|a:1:{s:5:\"stihi\";a:0:{}}modx.user.0.attributes|a:1:{s:5:\"stihi\";a:5:{s:16:\"modAccessContext\";a:12:{s:6:\"author\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:4:\"blog\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:5:\"event\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:8:\"journals\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:7:\"konkurs\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:8:\"litkursy\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:5:\"proza\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:7:\"publish\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:6:\"rabota\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:5:\"stihi\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:6:\"theory\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}s:3:\"web\";a:1:{i:0;a:3:{s:9:\"principal\";i:0;s:9:\"authority\";s:1:\"0\";s:6:\"policy\";a:3:{s:4:\"load\";b:1;s:6:\"formit\";b:1;s:18:\"formit_encryptions\";b:0;}}}}s:22:\"modAccessResourceGroup\";a:0:{}s:17:\"modAccessCategory\";a:0:{}s:28:\"sources.modAccessMediaSource\";a:0:{}s:18:\"modAccessNamespace\";a:0:{}}}')
        Array
        (
            [0] => HY000
            [1] => 2014
            [2] => Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
        )
          Василий Наумкин
          30 марта 2019, 14:13
          0
          Ты решил меня про все свои ошибки в логе спросить?

          Это тема — про обновление mSearch2, не надо флудить.
          Wassi Wassinen
          30 марта 2019, 14:41
          0
          Спасибо, что ответил. Что-то я потерялся от того, что всё перестало работать. :))
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10