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

Евгений
654
0
Добрый вечер! Недавно изучаю 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 р.";
    }

Комментарии ()

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

      1. Евгений
        14 ноября 2017, 21:53
        Спасибо большое за ответ! Дальше думаю разберусь теперь)))
      Войдите, пожайлуста, в аккаунт, чтобы оставить комментарий.