Разница цен (вычесть из старой новую)

Подскажите как из старой цены (old_price) вычесть новую (price) в minishop2.
Антон Левиц
16 ноября 2014, 22:31
modx.pro
3
3 191
-2

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

Наумов Алексей
17 ноября 2014, 08:41
+3
$old_price - $price
    Антон Левиц
    Антон Левиц
    17 ноября 2014, 09:23
    -1
    не работает
      Николай
      17 ноября 2014, 09:39
      +3
      Как был задан вопрос — так был дан ответ.
        Антон Левиц
        Антон Левиц
        17 ноября 2014, 09:53
        -1
        Нормально вопрос задан. В minishop2 есть поля старая цена и новая цена, соответственно old_price и price. Хочу вывести их разницу, типа «Вы экономите:..» Пытался написать сниппет, но не выходит, поэтому задал вопрос здесь, как из этих параметров сделать разницу. А выше ответ из разряда:
        — Как установить такую-то программу?
        — Установить такую-то программу.
          Наумов Алексей
          17 ноября 2014, 10:17
          1
          +3
          Ну вот сейчас вы сказали: что нужны вывести «Вы экономите:..», это уже нормальный вопрос.

          Простой сниппет [[!youSave? &price=`[[+price]]` &old_price=`[[+old_price]]`]]:
          $price = empty($price) ? 0 : $price;
          $old_price = empty($old_price) ? 0 : $old_price;
          
          if($old_price > 0){
            return 'Вы экномите: '.($old_price - $price);
          } 
          return '';
          как то так, не проверял только)
            Антон Левиц
            Антон Левиц
            17 ноября 2014, 11:09
            0
            Спасибо! Работает, если убрать в ms2_price_format десятичный разделитель
          Наумов Алексей
          17 ноября 2014, 10:13
          0
          ага)
            Сергей
            Сергей
            04 сентября 2017, 16:43
            0
            а если вызывать ваш сниппет в категории товаров, наверное, не лучший варик? как приджойнить разницу в ценах в вызов сниппета msProducts?
              Антон Левиц
              Антон Левиц
              04 сентября 2017, 18:41
              0
              все также запускаете сниппет как и в карточке товаров. в сниппете обычный математический расчет между двумя переменными. в категории же вы выводите старую цену и новую параметрами, значит и сниппет будет работать.
              можно еще пробелы обнулить до расчетов, чтобы десятичный разделитель не убирать в настройках.

              $price=str_replace(" ","",$price);
              $old_price=str_replace(" ","",$old_price);
                Сергей
                Сергей
                04 сентября 2017, 19:08
                0
                хм, странно, сделал сниппетом, кол-во запросов не увеличилось… помогло
                там еще old_price надо чистить от руб.
                $old_price = preg_replace('/[^0-9]/', '', $old_price);
                Я пробовал как тут modx.pro/work/10710-ms2-output-according-to-the-difference-price-old-price-percentage/ сделать через select — Не прокатило
                  Антон Левиц
                  Антон Левиц
                  04 сентября 2017, 20:16
                  0
                  Зачем old_price чистить от валюты, если валюта выводится отдельно? :)
                  Селектом в категориях еще быстрее выводить.
                  Добавляете в сниппет
                  &select=`["ROUND(((old_price - price) / old_price) * 100) as price_percentage"]`
                  и выводите переменную в нужном месте шаблона
                  Ваша скидка {$price_percentage}%

                    Сергей
                    Сергей
                    04 сентября 2017, 20:21
                    0
                    ХЗ, у меня old_price сразу с валютой идет, тоже не пойму в чем дело)))
                    По поводу селекта — фиг там, у меня там еще заджойнена такая конструкция
                    &select=`{
                    	"msProduct":"*"
                    	,"360x270":"360x270.url as 360x270"
                    	,"360x270x1":"360x270x1.url as 360x270x1"
                    	,"ecThread": "ecThread.rating_simple as rating"
                    }`
                    и этот ROUND хз как вставлять…
      Алексей Шумаев
      05 сентября 2017, 11:19
      0
      Всем нам поможет prepareSnippet. Делаем там что угодно, например:
      $row['discount'] = round(100 - (100 * $row['price']/ $row['old_price']));
      return json_encode($row);
      В чанке у вас теперь есть [[+discount]], ну или {$discount} для fenom
        Сергей
        Сергей
        05 сентября 2017, 14:21
        0
        мммм… ваша метода добавляет по еще одному запросу на товар. Вызов простенького сниппета, как описано выше, вообще не добавляет запросов…
          Алексей Шумаев
          05 сентября 2017, 14:24
          0
          Зачем ещё запрос?
          «Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.»
          Т.е. обрабатываются уже полученные результаты запроса, перед отдачей в чанки.

          Создайте сниппет prepareData
          <?php
          if (!is_array($row)) {
          	return '{}';
          }
          $row['discount'] = round(100 - (100 * $row['price']/ $row['old_price']));
          return json_encode($row);
          и вызовите любой сниппет, использующий pdoTools (pdoResource,msProducts в данном случае) с параметром prepareSnippet = prepareData

          Ну и обработайте $row['price'] и $row['old_price'] перед формулой, если нужно убрать пробелы и т.п.
            Сергей
            Сергей
            05 сентября 2017, 15:54
            0
            Имелось ввиду, что еще один запрос на каждый товар ДОБАВИТСЯ.
            Я так и сделал — вызвал сниппет через prepareSnippet. И прибавился еще один запрос на товар, в статистике модикса. Т.е. в категории, где на страницу выводится по 20 товаров — будет плюс 20 запросов. Учитывая, что у меня сейчас 41 запрос на страницу категории, плюс еще 20 будет тяжко…
            Разговор естессно про откешированный результат, без кеша вообще страшно смотреть///
            НЕ, даже 32 запроса на страницу добавилось!!! при 20 товарах…
            prepareSnippet какой-то не такой, не торт он! не торт.
              Алексей Шумаев
              05 сентября 2017, 16:08
              0
              А что у вас в этом сниппете?
              Мне интересно, откуда дополнительные запросы появляются.
                Сергей
                Сергей
                05 сентября 2017, 16:33
                0
                ну Ваш же сниппет там…
                  Алексей Шумаев
                  05 сентября 2017, 16:38
                  0
                  Посмотрю попозже
                    Алексей Шумаев
                    05 сентября 2017, 17:30
                    0
                    Поставил debugParser на тесте. У меня ничего не прибавляется. Зато скидка нормально считается.
                    Смотрите, что у вас. Если используете debugParser с ?debug=1, то имейте ввиду, что если что-то обновляете с галкой очистки кэша, то в первый раз получите кол-во запросов без кэша. Обновим страницу и получим снова с кэшем. Может отсюда +32 запроса?
                      Сергей
                      Сергей
                      05 сентября 2017, 17:38
                      0
                      я смотрю кол-во запросов вот так:
                      queries: [^q^]
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          21