MiniShop2. Вывод во фронтенд цен товаров из корзины без скидки.
Добрый день.
Изучаю написание плагинов на примерах. Поставил себе задачу реализовать простейшую систему скидок от общей суммы заказа. Код плагина такой:
UPD В чанке корзины есть примерно такой код:
Я хочу передать в чанк некие данные, расчитанные в плагине. {$product.price} передаёт высчитанную цену как и положено. {$product.clear_price} не отображается. Как мне это сделать?
UPD2 Обнаружился странный глюк(?). Если я использую для передачи цены без скидки поле old_price товара корзины, то в чанке fenom передаёт её корректно в код {$product.old_price}, но… в зависимости от суммы заказа! Т.е. если сумма заказа более определённой цифры, передаётся вычисленная мной цена, если меньше, передаётся значение, которое хранится в поле old_price данного товара в каталоге. Сейчас код плагина у меня такой:
Изучаю написание плагинов на примерах. Поставил себе задачу реализовать простейшую систему скидок от общей суммы заказа. Код плагина такой:
<?php
switch ($modx->event->name) {
case 'msOnChangeInCart':
case 'msOnRemoveFromCart':
case 'msOnAddToCart':
$discount = 0;
$status = $cart->status();
$tmp = $cart->get();
//Cтавим изначальную цену без скидок
foreach($tmp as $_key=>$cartItem) {
if ($product = $modx->getObject('msProduct', $cartItem['id'])) {
$tmp[$_key]['clear_price'] = $product->get('price');
$tmp[$_key]['price'] = $product->get('price');
}
}
if($status['total_cost']>=6000) $discount = 5;
elseif($status['total_cost']>=3000) $discount = 3;
//Если есть скидка, пересчитываем цены на товары в $tmp
if($discount>0) {
foreach ($tmp as $_key=>$cartItem) {
if ($product = $modx->getObject('msProduct', $cartItem['id'])) {;
$tmp[$_key]['price'] = $product->get('price')*((100-$discount)/100);
}
}
}
//Записываем данные в корзину
$cart->set($tmp);
//$modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true));
break;
}
В коде к товарам корзины я добавил дополнительное поле clear_price, в котором хранится цена товара без скидок. Как можно вывести его в чанк корзины msCart?UPD В чанке корзины есть примерно такой код:
{foreach $products as $product}
...{$product.clear_price}...
...{$product.price}...
{/foreach}
Я хочу передать в чанк некие данные, расчитанные в плагине. {$product.price} передаёт высчитанную цену как и положено. {$product.clear_price} не отображается. Как мне это сделать?
UPD2 Обнаружился странный глюк(?). Если я использую для передачи цены без скидки поле old_price товара корзины, то в чанке fenom передаёт её корректно в код {$product.old_price}, но… в зависимости от суммы заказа! Т.е. если сумма заказа более определённой цифры, передаётся вычисленная мной цена, если меньше, передаётся значение, которое хранится в поле old_price данного товара в каталоге. Сейчас код плагина у меня такой:
<?php
switch ($modx->event->name) {
case 'msOnAddToCart':
case 'msOnChangeInCart':
case 'msOnRemoveFromCart':
$discount = 0;
$status = $cart->status();
$tmp = $cart->get();
foreach ($tmp as $_key=>$cartItem) {
if($product = $modx->getObject('msProduct', $cartItem['id'])) {
$tmp[$_key]['old_price'] = $product->get('price'); // #3
if($status['total_cost']>=6000) $discount = 5; // #1
elseif($status['total_cost']>=3000) $discount = 3;// #2
$tmp[$_key]['price'] = $product->get('price')*((100-$discount)/100);
}
}
//Записываем данные в корзину
$cart->set($tmp);
$modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true));
break;
}
Методом тыка пришёл к выводу, что строки #1 и #2 каким-то образом влияют на значение в {$product.old_price} в чанке. Причём проверка через $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($cart->get(), true)); показывает, что значение old_price в строке #3 устанавливается, но почему-то не передаётся в чанк.