MS2 вывод по разнице price-old_price в процентах

30
Привет!
Переношу эту задачу из раздела вопросы.

Мне нужно вывести товары minisop2 отсортированные по проценту разницы price и old_price

т.е.

[[!pdoPage?
				&element=`msProducts`
				&tpl=`tpl`
				&sortby=`этот_процент`
				&sortdir=`DESC`
			]]
для получения этого процента в товаре я использую сниппет [[!procent]]

<?php
$price2 = str_replace(" ","",$modx->resource->get('price'));
$old_price2 = str_replace(" ","",$modx->resource->get('old_price'));
$pricevariations = $old_price2 - $price2;

if($old_price2 > 0){
  echo '<div class="procent"><span>'.number_format(round(($pricevariations / $old_price2) * 100), 0, '.', ' ') .'</span></div>';
}
чтобы этот же процент получить в категории товаров пришлось сниппет немного изменить

<?php
$price2 = str_replace(" ","",empty($price) ? 0 : $price);
$old_price2 = str_replace(" ","",empty($old_price) ? 0 : $old_price);
if($old_price2 > 0){
  return '<div class="procent"><span>'.number_format(round((($old_price2 - $price2) / $old_price2) * 100), 0, '.', ' ') .'</span></div>';
} 
return '';
и его вызов
[[!procent_category? &price=`[[+price]]` &old_price=`[[+old_price]]`]]
Это работает. Но теперь нужно сделать вывод товара отсортированного по возрастанию или убыванию по этому проценту и, например, не показывать товары, где процент меньше 10%.
Проще говоря, мне нужно работать с этой цифрой, как с ценой.

Как я понимаю и мне подсказывают это число нужно высчитывать и записывать в бд сразу при сохранении товара. В магазине около 1000 товаров, их пересохранять нет желания.

Хотелось бы решение в виде плагина или пошаговой инструкции.
Доступ к сайту не даю.

Готов выслушать Ваши предложения…
Виталий
21 декабря 2016, 09:17
modx.pro
1
1 454
+1

Комментарии в этом разделе отключены, так что вы должны указать свои контакты прямо в объявлении, или активировать отправку сообщений из профиля.

Обратите внимание, что modx.pro не несёт никакой ответственности за выполнение работы или оплату заказа. Это просто доска объявлений, дальше вы общаетесь за пределами нашей площадки.