Новый вариант шаблона Битрикс (sale.order.ajax). Если компонент или шаблон оформления нестандартный, добавьте участки кода модуля бонусной системы. Эталон - шаблон new_logictim_bonus, который поставляется с модулем.
Сначала проверьте автоинтеграцию: корзина и оформление заказа. Для владельца без кода есть страница кастомный шаблон оформления.
Файл: /bitrix/components/bitrix/sale.order.ajax/templates/new_logictim_bonus/order_ajax.js
В метод getPropertyRowNode: function(property, propsItemsContainer, disabled) перед строкой
propsItemsContainer.appendChild(propsItemNode);
вставьте условие (чтобы указанная строка попадала под него):
if(property.getSettings().CODE != 'LOGICTIM_ADD_BONUS' && property.getSettings().CODE != 'LOGICTIM_PAYMENT_BONUS')
В метод editTotalBlock: function() перед
if (this.options.showPayedFromInnerBudget)
вставьте:
<!--LOGICTIM_BONUS-->
//console.log(this.result.LOGICTIM_BONUS);
if(this.result.LOGICTIM_BONUS != null && this.result.LOGICTIM_BONUS.LOGICTIM_BONUS_USER_DOSTUP == 'Y')
{
if(this.BXFormPosting == true)
{
var logictimPayBonus = this.result.LOGICTIM_BONUS.PAY_BONUS;
var logictimPayBonusFormated = this.result.LOGICTIM_BONUS.PAY_BONUS_FORMATED;
if(this.result.LOGICTIM_BONUS.INPUT_BONUS == '-')
{
logictimPayBonus = 0;
this.result.TOTAL.ORDER_TOTAL_PRICE_FORMATED = this.result.LOGICTIM_BONUS.ORDER_SUM_FORMATED;
}
}
else
{
var logictimPayBonus = this.result.LOGICTIM_BONUS.PAY_BONUS_NO_POST;
var logictimPayBonusFormated = this.result.LOGICTIM_BONUS.PAY_BONUS_NO_POST_FORMATED;
}
if(logictimPayBonus >= 0)
{
var logictimPayBonusText = this.result.LOGICTIM_BONUS.TEXT_BONUS_PAY;
if(logictimPayBonus > 0)
this.totalInfoBlockNode.appendChild(this.createTotalUnit(logictimPayBonusText, '<span>'+logictimPayBonusFormated+'</span>'));
var orderPropPaymentBonusId = this.result.LOGICTIM_BONUS.ORDER_PROP_PAYMENT_BONUS_ID;
if(BX('LOGICTIM_PAYMENT_BONUS'))
{
if(BX('LOGICTIM_PAYMENT_BONUS').name != 'ORDER_PROP_'+orderPropPaymentBonusId)
{
BX.adjust(BX('LOGICTIM_PAYMENT_BONUS'), {attrs: {name: 'ORDER_PROP_'+orderPropPaymentBonusId}});
}
var logictimPayInput = BX('LOGICTIM_PAYMENT_BONUS').value;
BX('LOGICTIM_PAYMENT_BONUS').value = logictimPayBonus;
}
}
}
<!--LOGICTIM_BONUS-->
В тот же метод editTotalBlock после блока
if (parseFloat(total.PAY_SYSTEM_PRICE) >= 0 && this.result.DELIVERY.length)
{
this.totalInfoBlockNode.appendChild(this.createTotalUnit(BX.message('SOA_PAYSYSTEM_PRICE'), '~' + total.PAY_SYSTEM_PRICE_FORMATTED));
}
вставьте:
<!--LOGICTIM_BONUS-->
if(this.result.LOGICTIM_BONUS && this.result.LOGICTIM_BONUS.LOGICTIM_BONUS_USER_DOSTUP == 'Y') {
var logictimAddBonusText = this.result.LOGICTIM_BONUS.TEXT_BONUS_BALLS;
if(this.result.LOGICTIM_BONUS.ADD_BONUS > 0)
this.totalInfoBlockNode.appendChild(this.createTotalUnit(logictimAddBonusText, '<span>'+this.result.LOGICTIM_BONUS.ADD_BONUS+'</span>'));
var lb_pay_block = BX('logictim_payfield_bonus');
if(this.result.LOGICTIM_BONUS.MAX_BONUS <= 0 && BX('logictim_payfield_bonus'))
BX.hide(lb_pay_block);
if(this.result.LOGICTIM_BONUS.MAX_BONUS > 0 && BX('logictim_payfield_bonus'))
{
BX.show(lb_pay_block);
BX('LOGICTIM_PAYMENT_BONUS').value = logictimPayBonus;
}
}
<!--LOGICTIM_BONUS-->
В актуальном шаблоне new_logictim_bonus из модуля блок начисления может быть короче (без hide/show поля) - ориентируйтесь на код вашего шаблона и эталон в модуле.
В метод createBasketItemColumn: function(column, allData, active) после ветки колонки SUM (после вывода цены и старой цены) вставьте:
<!--LOGICTIM_BONUS-->
if(this.result.LOGICTIM_BONUS && this.result.LOGICTIM_BONUS.LOGICTIM_BONUS_USER_DOSTUP == 'Y') {
if(this.result.LOGICTIM_BONUS.ARR_BONUS)
var add_bonus_item = this.result.LOGICTIM_BONUS.ARR_BONUS.ITEMS[data.PRODUCT_ID].ADD_BONUS;
if(add_bonus_item > 0)
{
textNode.appendChild(BX.create('div', {props: {className: 'bonus'}, html: '+'+add_bonus_item+' '+this.result.LOGICTIM_BONUS.TEXT_BONUS_FOR_ITEM}));
}
}
<!--LOGICTIM_BONUS-->
Файл: .../templates/new_logictim_bonus/template.php
Перед блоком <!-- ORDER SAVE BLOCK --> вставьте:
<? //-------LOGICTIM BONUS FEILD-------//?>
<? if(isset($arResult["PAY_BONUS"]) && $arResult["PAY_BONUS"] >= 0 && $arResult["USER_BONUS"] > 0) :?>
<div id="bonus_payment_block" class="bx-soa-section">
<div class="bx-soa-section-title-container">
<h2 class="bx-soa-section-title col-sm-9">
<span class="bx-soa-section-title-count"></span>Оплата бонусами
</h2>
</div>
<div class="bx-soa-section-content">
<div class="bonus_comment">
<strong><?=COption::GetOptionString("logictim.balls", "HAVE_BONUS_TEXT", 'Have bonus')?> <?=$arResult["USER_BONUS"]?></strong>
<? if($arResult["MIN_BONUS"] > 0) {?>
<span><br><?=COption::GetOptionString("logictim.balls", "MIN_BONUS_TEXT", 'Min use bonus').$arResult["MIN_BONUS"];?></span>
<? }?>
<? if($arResult["MAX_BONUS"] > 0) {?>
<span><br><?=COption::GetOptionString("logictim.balls", "MAX_BONUS_TEXT", 'Max use bonus').$arResult["MAX_BONUS"];?></span>
<? }?>
<div><br></div></div>
<div id="bonus_payfield_block">
<strong><?=COption::GetOptionString("logictim.balls", "PAY_BONUS_TEXT", 'Pay from bonus')?></strong>
<div class="bx-soa-coupon-input">
<input type="text" id="LOGICTIM_PAYMENT_BONUS" class="form-control bx-ios-fix" onchange="BX.Sale.OrderAjaxComponent.sendRequest();" value="<?=$arResult["PAY_BONUS"]?>" name="ORDER_PROP_<?=$arResult["ORDER_PROP_PAYMENT_BONUS_ID"]?>">
</div>
</div>
</div>
</div>
<? endif;?>
<? //-------LOGICTIM BONUS FEILD-------//?>
В старой инструкции в onchange иногда указан RS.Sale.OrderAjaxComponent.sendRequest() - в эталоне модуля используется BX.Sale.OrderAjaxComponent.sendRequest(). Берите вызов, который соответствует вашему шаблону.
В style.css и style.min.css добавьте:
.logictim_bonus_input_block .lg_description span{font-size:12px;color:#a3a3a3;}
Если нужно показать начисление за позиции средствами PHP (например в summary), используйте:
$arBonus = cHelperCalc::CartBonus($arResult["BASKET_ITEMS"]);
//За единицу товара
$arBonus["ITEMS"][$arItem["PRODUCT_ID"]]["ADD_BONUS_UNIT"];
//За все количество товара
$arBonus["ITEMS"][$arItem["PRODUCT_ID"]]["ADD_BONUS"];
//За всю корзину
$arBonus["ALL_BONUS"];
<? //На страницу оформления заказа (sale.order.ajax / шаблон / summary.php)
CModule::IncludeModule('logictim.balls');
$arBonus = cHelperCalc::CartBonus($arResult["BASKET_ITEMS"]);
?>
<?
//За единицу товара
if($arBonus["ITEMS"][$arItem["PRODUCT_ID"]]["ADD_BONUS_UNIT"] > 0) {?>
<div class="bonus">
+ <?=$arBonus["ITEMS"][$arItem["PRODUCT_ID"]]["ADD_BONUS_UNIT"];?> <?=COption::GetOptionString("logictim.balls", "TEXT_BONUS_FOR_ITEM", '')?>
</div>
<? }?>
<?
//За все количество товара
if($arBonus["ITEMS"][$arItem["PRODUCT_ID"]]["ADD_BONUS"] > 0) {?>
<div class="bonus">
+ <?=$arBonus["ITEMS"][$arItem["PRODUCT_ID"]]["ADD_BONUS"];?> <?=COption::GetOptionString("logictim.balls", "TEXT_BONUS_FOR_ITEM", '')?>
</div>
<? }?>
<?
//За всю корзину
if($arBonus["ALL_BONUS"] > 0) {?>
<div class="bonus">
+ <?=$arBonus["ALL_BONUS"];?> <?=COption::GetOptionString("logictim.balls", "TEXT_BONUS_FOR_ITEM", '')?>
</div>
<? }?>
Смотрите также: старый шаблон, кастомная корзина.