Разница цен (вычесть из старой новую)
Подскажите как из старой цены (old_price) вычесть новую (price) в minishop2.
Комментарии: 21
$old_price - $price
не работает
Как был задан вопрос — так был дан ответ.
Нормально вопрос задан. В minishop2 есть поля старая цена и новая цена, соответственно old_price и price. Хочу вывести их разницу, типа «Вы экономите:..» Пытался написать сниппет, но не выходит, поэтому задал вопрос здесь, как из этих параметров сделать разницу. А выше ответ из разряда:
— Как установить такую-то программу?
— Установить такую-то программу.
— Как установить такую-то программу?
— Установить такую-то программу.
Ну вот сейчас вы сказали: что нужны вывести «Вы экономите:..», это уже нормальный вопрос.
Простой сниппет [[!youSave? &price=`[[+price]]` &old_price=`[[+old_price]]`]]:
Простой сниппет [[!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 '';
как то так, не проверял только)
Спасибо! Работает, если убрать в ms2_price_format десятичный разделитель
ага)
а если вызывать ваш сниппет в категории товаров, наверное, не лучший варик? как приджойнить разницу в ценах в вызов сниппета msProducts?
все также запускаете сниппет как и в карточке товаров. в сниппете обычный математический расчет между двумя переменными. в категории же вы выводите старую цену и новую параметрами, значит и сниппет будет работать.
можно еще пробелы обнулить до расчетов, чтобы десятичный разделитель не убирать в настройках.
можно еще пробелы обнулить до расчетов, чтобы десятичный разделитель не убирать в настройках.
$price=str_replace(" ","",$price);
$old_price=str_replace(" ","",$old_price);
хм, странно, сделал сниппетом, кол-во запросов не увеличилось… помогло
там еще old_price надо чистить от руб.
там еще 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 — Не прокатило
Зачем old_price чистить от валюты, если валюта выводится отдельно? :)
Селектом в категориях еще быстрее выводить.
Добавляете в сниппет
Селектом в категориях еще быстрее выводить.
Добавляете в сниппет
&select=`["ROUND(((old_price - price) / old_price) * 100) as price_percentage"]`
и выводите переменную в нужном месте шаблонаВаша скидка {$price_percentage}%
ХЗ, у меня old_price сразу с валютой идет, тоже не пойму в чем дело)))
По поводу селекта — фиг там, у меня там еще заджойнена такая конструкция
По поводу селекта — фиг там, у меня там еще заджойнена такая конструкция
&select=`{
"msProduct":"*"
,"360x270":"360x270.url as 360x270"
,"360x270x1":"360x270x1.url as 360x270x1"
,"ecThread": "ecThread.rating_simple as rating"
}`
и этот ROUND хз как вставлять…
Всем нам поможет prepareSnippet. Делаем там что угодно, например:
$row['discount'] = round(100 - (100 * $row['price']/ $row['old_price']));
return json_encode($row);
В чанке у вас теперь есть [[+discount]], ну или {$discount} для fenom
мммм… ваша метода добавляет по еще одному запросу на товар. Вызов простенького сниппета, как описано выше, вообще не добавляет запросов…
Зачем ещё запрос?
«Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.»
Т.е. обрабатываются уже полученные результаты запроса, перед отдачей в чанки.
Создайте сниппет prepareData
Ну и обработайте $row['price'] и $row['old_price'] перед формулой, если нужно убрать пробелы и т.п.
«Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.»
Т.е. обрабатываются уже полученные результаты запроса, перед отдачей в чанки.
Создайте сниппет 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'] перед формулой, если нужно убрать пробелы и т.п.
Имелось ввиду, что еще один запрос на каждый товар ДОБАВИТСЯ.
Я так и сделал — вызвал сниппет через prepareSnippet. И прибавился еще один запрос на товар, в статистике модикса. Т.е. в категории, где на страницу выводится по 20 товаров — будет плюс 20 запросов. Учитывая, что у меня сейчас 41 запрос на страницу категории, плюс еще 20 будет тяжко…
Разговор естессно про откешированный результат, без кеша вообще страшно смотреть///
НЕ, даже 32 запроса на страницу добавилось!!! при 20 товарах…
prepareSnippet какой-то не такой, не торт он! не торт.
Я так и сделал — вызвал сниппет через prepareSnippet. И прибавился еще один запрос на товар, в статистике модикса. Т.е. в категории, где на страницу выводится по 20 товаров — будет плюс 20 запросов. Учитывая, что у меня сейчас 41 запрос на страницу категории, плюс еще 20 будет тяжко…
Разговор естессно про откешированный результат, без кеша вообще страшно смотреть///
НЕ, даже 32 запроса на страницу добавилось!!! при 20 товарах…
prepareSnippet какой-то не такой, не торт он! не торт.
А что у вас в этом сниппете?
Мне интересно, откуда дополнительные запросы появляются.
Мне интересно, откуда дополнительные запросы появляются.
ну Ваш же сниппет там…
Посмотрю попозже
Поставил debugParser на тесте. У меня ничего не прибавляется. Зато скидка нормально считается.
Смотрите, что у вас. Если используете debugParser с ?debug=1, то имейте ввиду, что если что-то обновляете с галкой очистки кэша, то в первый раз получите кол-во запросов без кэша. Обновим страницу и получим снова с кэшем. Может отсюда +32 запроса?
Смотрите, что у вас. Если используете debugParser с ?debug=1, то имейте ввиду, что если что-то обновляете с галкой очистки кэша, то в первый раз получите кол-во запросов без кэша. Обновим страницу и получим снова с кэшем. Может отсюда +32 запроса?
я смотрю кол-во запросов вот так:
queries: [^q^]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.