Сортировка mfilter2 по проценту скидки [РЕШЕНО]

Можно ли как-то сделать так, что бы сортировалось по размеру скидки?
Что-то вроде такого хочу получить:
<a type="button" class="sort btn" href="#" data-sort="ms|discount" data-dir="desc" class="sort sort_name">Скидке<span></span></a>
Поля discount не существует (я простокак пример привел). Хочется что бы процент где-то там высчитывался автоматически.

Спасибо заранее
Ivan
05 июня 2021, 16:45
modx.pro
2
553
0

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

Ivan
06 июня 2021, 18:57
0
В общем если кому интересно:
1) Создаем в базе в таблице PREFIX_products поле тепа integer. Например discount_percent. Ну и добавляем это поле (если кому-то нужно распишу как это делать. Либо скачайте дополнение на модсторе.про).
2) Создаем плагин (что бы при сохранении ресурса пересчитывался процент скидки).
<?php
$eventName = $modx->event->name;

switch($eventName) {
    case 'OnBeforeDocFormSave':
        if ($resource->get('template') == 7) {
            if ($resource->get('old_price') > 0) {
                $discount_percent = 100 - floor($resource->get('price') / $resource->get('old_price') * 100);
                $resource->set('discount_percent', $discount_percent);
                $resource->save();
            }
        }
        break;
}
3) Задаем всем товарам этот процент скидки через дополнение Console:
<?php
$products = $modx->getIterator('msProduct');
foreach($products as $resource) {
    if ($resource->get('old_price') > 0) {
        $discount_percent = 100 - floor($resource->get('price') / $resource->get('old_price') * 100);
        $resource->set('discount_percent', $discount_percent);
        $resource->save();
    }
}
4) Ссылку на сортировку выводим например так:
<a class="sort btn btn-default" href="#" data-sort="ms|discount_percent" data-dir="desc" data-default="desc" class="sort sort_name">Скидке<span></span></a>
Код ни на что не претендует. Если кто-то сделает лучше — велком.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1