Как доработать следующий сниппет (MODX)?

Добрый вечер! Недавно изучаю ModX, простите, если глупый вопрос задаю. В общем есть страница услуги, там 4 доп поля с ценами (первое - цена разового занятия, остальные - абонементы) price, abon4, abon8, abon12 Написал сниппет, который считает стоимость одного занятия для каждого вида и выводит цену "от". На странице услуги все работает норм, а на странице категорий никак не могу добиться, чтобы он считал (там выводятся карточки услуг, нужно чтобы тоже цену "от" подставлял). Вывод карточек через pdoResources. Заранее благодарю за помощь

<?php
    $price = $modx->resource->getTVValue('price');
    $abon4 = (int) ($modx->resource->getTVValue('abon4')/4);
    $abon8 = (int) ($modx->resource->getTVValue('abon8')/8);
    $abon12 = (int) ($modx->resource->getTVValue('abon12')/12);

    $min_price = min(array_diff(array($price, $abon4, $abon8, $abon12), array(0, null)));

    if ($abon4 > 0 or $abon8 > 0 or $abon12 > 0) {
        print "от $min_price р.";
    } else {
        print "$price р.";
    }

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

Александр Мальцев
Александр Мальцев
Добрый вечер!
Вам необходимо создать более универсальный сниппет, а данные в него передавать в виде параметров.
Например, на странице так:
[[!MySnippet? 
      &price=`[[*price]]`
      &abon4 = `[[*abon4]]`
      &abon8 = `[[*abon8]]`
      &abon12 = `[[*abon12]]`
]]
А на странице категорий так:
[[!MySnippet? 
      &price=`[[+price]]`
      &abon4 = `[[+abon4]]`
      &abon8 = `[[+abon8]]`
      &abon12 = `[[+abon12]]`
]]
На странице категории при выборе занятий tv конечно же нужно будет присоединить к выбираемым данным.

Для возвращения результата сниппета необходимо использовать return.
Евгений
Евгений
Спасибо большое за ответ! Дальше думаю разберусь теперь)))
Евгений
Евгений
Все отлично работает, вот окончательный вариант сниппета, может кому то понадобится:
<?php
$price = (isset($price)) ? $price : '';
    $abon4 = (isset($abon4)) ? $abon4/4 : '0';
    $abon8 = (isset($abon8)) ? $abon8/8 : '0';
    $abon12 = (isset($abon12)) ? $abon12/12 : '0';
    $min_price = (int) min(array_diff(array($price, $abon4, $abon8, $abon12), array(0, null)));
    if ($abon4 > 0 or $abon8 > 0 or $abon12 > 0) {
        $price_ot = "от $min_price р.";
    } else {
        $price_ot = "$price р.";
    }
return $price_ot;
Вызов на странице категории:
[[!PriceOt? 
	&price=`[[+tv.price]]` 
	&abon4=`[[+tv.abon4]]` 
	&abon8=`[[+tv.abon8]]` 
	&abon12=`[[+tv.abon12]]`
]]
Вызов на карточке услуги:
[[!PriceOt? 
	&price=`[[*price]]` 
	&abon4=`[[*abon4]]` 
	&abon8=`[[*abon8]]` 
	&abon12=`[[*abon12]]`
]]