понедельник, 29 сентября 2014 г.

Арифметические операции над tv-параметрами

Появилась необходимость выводить к услуге цену такой, как она хранится в tv-параметре и цену, к которой прибавлено 40%.

Создадим сниппет price:
<?php
$id=$document['id'];
$document_tvs=$modx->getTemplateVarOutput(true, $id);
$templatevar_output=$document_tvs['price_group'];
$output = round((str_replace(" ","",$templatevar_output)/0.6),-4);
echo $output;
?>


Пошагово действия, производимые в сниппете:
1. получаем id текущего ресурса ($id=$document['id'];)
2. имея id, получаем необходимый tv-параметр (в данном случае это price_group) ($document_tvs=$modx->getTemplateVarOutput(true, $id); $templatevar_output=$document_tvs['price_group'];)
3. убираем пробелы из цены (str_replace(" ","",$templatevar_output)
4. производим необходимое вычисление (в данном случае делим на 0.6) (str_replace(" ","",$templatevar_output)/0.6)
5. округляем до 10000, т.е. по 4 последним разрядам (round((str_replace(" ","",$templatevar_output)/0.6),-4))
6. выводим полученный результат (echo $output;)

В чанке в месте, где нам необходимо выводить, полученное значение вставляем вызов сниппета:
<span class="price_item">[[price]] руб.</span>

Таким образом, например, имея значение tv-параметра price_group 1 070 000 после вызова сниппета получаем значение 1780000.

1 комментарий: