MiniShop2. Вывод во фронтенд цен товаров из корзины без скидки.
Есть решение
Добрый день.
Изучаю написание плагинов на примерах. Поставил себе задачу реализовать простейшую систему скидок от общей суммы заказа. Код плагина такой:
UPD В чанке корзины есть примерно такой код:
Я хочу передать в чанк некие данные, расчитанные в плагине. {$product.price} передаёт высчитанную цену как и положено. {$product.clear_price} не отображается. Как мне это сделать?
UPD2 Обнаружился странный глюк(?). Если я использую для передачи цены без скидки поле old_price товара корзины, то в чанке fenom передаёт её корректно в код {$product.old_price}, но… в зависимости от суммы заказа! Т.е. если сумма заказа более определённой цифры, передаётся вычисленная мной цена, если меньше, передаётся значение, которое хранится в поле old_price данного товара в каталоге. Сейчас код плагина у меня такой:
0
Изучаю написание плагинов на примерах. Поставил себе задачу реализовать простейшую систему скидок от общей суммы заказа. Код плагина такой:
<?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 устанавливается, но почему-то не передаётся в чанк.
Комментарии: 0