Автоматический расчет стоимости
Добрый день!
Необходимо сделать автоматический расчет цены и вывести число на сайте
1) Есть 2 tv поля: 1-е поле (tv price 1)- цена постройки 1 этажного дома (какое-то число)
2-е поле (tv price 2) — цена постройки 2-х этажного дома (какое-то число)
2) Есть 2 категории ресурсов (одноэтажные и двухэтажные)
3) Также есть tv поле (tv plochad) с указанием площади дома
Необходимо чтобы tv plochad умножалось на цену tv price 1, если ресурс создан в категории одноэтажных домов либо на tv price 2, если ресурс создан соответственно в категории двухэтажных домов и умноженное число выводилось во фронтэнде.
Т.е должна быть проверка в какой категории создан ресурс.
Надеюсь понятно расписал )
Помогите плиз!
Спасибо!
Необходимо сделать автоматический расчет цены и вывести число на сайте
1) Есть 2 tv поля: 1-е поле (tv price 1)- цена постройки 1 этажного дома (какое-то число)
2-е поле (tv price 2) — цена постройки 2-х этажного дома (какое-то число)
2) Есть 2 категории ресурсов (одноэтажные и двухэтажные)
3) Также есть tv поле (tv plochad) с указанием площади дома
Необходимо чтобы tv plochad умножалось на цену tv price 1, если ресурс создан в категории одноэтажных домов либо на tv price 2, если ресурс создан соответственно в категории двухэтажных домов и умноженное число выводилось во фронтэнде.
Т.е должна быть проверка в какой категории создан ресурс.
Надеюсь понятно расписал )
Помогите плиз!
Спасибо!
Комментарии: 25
[[*plochad:mpy=`[[*parent:eq=`17`:then=`[[*price_1]]`:else=`[[*price_2]]`]]`]]
Но лучше, конечно, написать сниппет [[*id:getPrice]]:
if (isset($input) && $input) {
$resource = $modx->getObject('modResource', $input);
if (!$resource) return '';
} else {
$resource = $modx->resource;
}
switch ($resource->parent) {
// Перечисляем категории 1-этажных домов
case 17:
case 22:
case 38:
$output = $resource->getTVValue('price_1') * $resource->getTVValue('plochad');
break;
// И двухэтажных
case 24:
$output = $resource->getTVValue('price_2') * $resource->getTVValue('plochad');
break;
default:
$output = '';
break;
}
return $output;
Спасибо за ответ!
Не работает что-то )
Создал сниппет getPrice.
[[*id:getPrice]] если это вставляю, то выводит просто id ресурса
Что не так?
Не работает что-то )
Создал сниппет getPrice.
[[*id:getPrice]] если это вставляю, то выводит просто id ресурса
Что не так?
Может, [[+id:getPrice]]?
Тогда вообще пусто…
Если вставляю [[*plochad:mpy=`[[*parent:eq=`17`:then=`[[*price_1]]`:else=`[[*price_2]]`]]`]]
то выводит просто общую площадь…
то выводит просто общую площадь…
Илья, выручайте )
Проверьте названия твшек
Проверил… все правильно указываю!
Ну тогда я не знаю… может, у сообщесва будут идеи…
Спасибо за попытки )
Ребята, помогите советом.
Сниппет Илья написал правильный.
Напишите ид обеих категорий и скиньте итоговый код код сниппета, который создали у себя.
Напишите ид обеих категорий и скиньте итоговый код код сниппета, который создали у себя.
сам сниппет
<?php
if (isset($input) && $input) {
$resource = $modx->getObject('modResource', $input);
if (!$resource) return '';
} else {
$resource = $modx->resource;
}
switch ($resource->parent) {
// Перечисляем категории 1-этажных домов
case 2:
$output = $resource->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
break;
// И двухэтажных и мансардных
case 24:
case 34:
$output = $resource->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
break;
default:
$output = '';
break;
}
return $output;
вызываю на странице так [[*id:getPrice]]
При вызове только id категории выводится
Если вызывать так [[!getPrice]], и TV price_etag_1 и price_etag_2 присвоить шаблону вывода дома и вбить цифры в эти TV в любом доме, то все считается, но ТОЛЬКО для конкретного дома
Если TV присвоить просто странице каталога, тогда пишет цена 0
Если TV присвоить просто странице каталога, тогда пишет цена 0
Разверните-ка дерево ресурсов и укажите, у каких ресурсов указана цена, у каких указана площадь. Если я в этот раз правильно понял, то вот так должно работать:
<?php
if (isset($input) && $input) {
$resource = $modx->getObject('modResource', $input);
if (!$resource) return '';
} else {
$resource = $modx->resource;
}
switch ($resource->parent) {
// Перечисляем категории 1-этажных домов
case 2:
$output = $resource->Parent->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
break;
// И двухэтажных и мансардных
case 24:
case 34:
$output = $resource->Parent->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
break;
default:
$output = '';
break;
}
return $output;
вот дерево ресурсов
поля цены выставил для ресурса проекты домов(корень)
поле площади есть у каждого ресурса (конкретного дома)
Вставил Ваш обновленный код… все равно не работает… только id показывает
поля цены выставил для ресурса проекты домов(корень)
поле площади есть у каждого ресурса (конкретного дома)
Вставил Ваш обновленный код… все равно не работает… только id показывает
<?php
if (isset($input) && $input) {
$resource = $modx->getObject('modResource', $input);
if (!$resource) return '';
} else {
$resource = $modx->resource;
}
$root = $modx->getObject('modResource', 1);
switch ($resource->parent) {
// Перечисляем категории 1-этажных домов
case 2:
$output = $root->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
break;
// И двухэтажных и мансардных
case 24:
case 34:
$output = $root->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
break;
default:
$output = '';
break;
}
return $output;
УРА! Заработало!
Спасибище Вам Илья!
Спасибище Вам Илья!
Вот в следующий раз всегда структуру тоже показывайте. Мы, программисты, хоть и обладаем экстрасенсорными способностями, но в меньшей степени, чем, например, Пахом…
Спасибо!
Обязательно учту!
Обязательно учту!
Еще вопросик…
Как мне выводимое число сделать с пробелом после 2-х знаков
к примеру выводится число 51500, а необходимо 51 500
Как мне выводимое число сделать с пробелом после 2-х знаков
к примеру выводится число 51500, а необходимо 51 500
UPD Решено!
Поделитесь решением)
Вот держите…
последнюю строку
заменяем на
если нужны числа после запятой то укажите
последнюю строку
return $output;
заменяем на
$myNumber = $output;
return number_format( $myNumber, 0, ',', ' ' );
это с округлениемесли нужны числа после запятой то укажите
( $myNumber, 2, ',', ' ' )
Ок, спасибо! попробую у себя. Мне правда нужно отформатировать число, получаемое из дополнительного поля Minishopa. наверное придется написать сниппет для этого.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.