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

Евгений
Евгений
1,1K
3
Содержание:
  1. Комментарии
Добрый вечер! Недавно изучаю 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

  1. Александр Мальцев
    Александр Мальцев
    2017-11-14 15:50:11
    Добрый вечер!
    Вам необходимо создать более универсальный сниппет, а данные в него передавать в виде параметров.
    Например, на странице так:
    [[!MySnippet? 
          &price=`[[*price]]`
          &abon4 = `[[*abon4]]`
          &abon8 = `[[*abon8]]`
          &abon12 = `[[*abon12]]`
    ]]
    А на странице категорий так:
    [[!MySnippet? 
          &price=`[[+price]]`
          &abon4 = `[[+abon4]]`
          &abon8 = `[[+abon8]]`
          &abon12 = `[[+abon12]]`
    ]]
    На странице категории при выборе занятий tv конечно же нужно будет присоединить к выбираемым данным.
    
    Для возвращения результата сниппета необходимо использовать return.
  1. Евгений
    Евгений
    2017-11-14 21:53:42
    Спасибо большое за ответ! Дальше думаю разберусь теперь)))
  • Евгений
    Евгений
    2017-11-14 22:51:14
    Все отлично работает, вот окончательный вариант сниппета, может кому то понадобится:
    <?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]]`
    ]]