Решил кастомизировать, чтобы работал от чекбоксов. Помимо DEFAULT и OTHERS сделал ITEMS, чтобы выводить все сразу и в каждом элементе свойство DEFAULT с булевым значением (в списке или нет).
Вывожу
Код |
---|
<div id="bx-set-const-<?=$curJsId?>" class="bx-set-constructor <?=$templateData['TEMPLATE_CLASS'];?>">
<div class="border">
<div class="head">
<img class="inb" src="/images/tick.png" alt='Пакет услуг '>
<span class="inb text_head">Пакет услуг </span>
</div>
<label>
<span class="service_text inb">Услуга</span>
<span class="price_text inb">Цена</span>
</label>
<div data-role="set-items">
<? foreach($arResult["SET_ITEMS"]["ITEMS"] as $key => $arItem) { ?>
<label
data-id="<?=$arItem["ID"]?>"
data-img="<?=$arItem["DETAIL_PICTURE"]["src"]?>"
data-url="<?=$arItem["DETAIL_PAGE_URL"]?>"
data-name="<?=$arItem["NAME"]?>"
data-price="<?=$arItem["PRICE_DISCOUNT_VALUE"]?>"
data-print-price="<?=$arItem["PRICE_PRINT_DISCOUNT_VALUE"]?>"
data-old-price="<?=$arItem["PRICE_VALUE"]?>"
data-print-old-price="<?=$arItem["PRICE_PRINT_VALUE"]?>"
data-diff-price="<?=$arItem["PRICE_DISCOUNT_DIFFERENCE_VALUE"]?>"
data-measure="<?=$arItem["MEASURE"]["SYMBOL_RUS"];?>"
data-quantity="<?=$arItem["BASKET_QUANTITY"];?>"
>
<input type="checkbox" name="<?=$arItem["ID"]?>" <?= $arItem['DEFAULT'] ? 'checked' : '' ?>>
<span class="service_text inb"><?=$arItem["NAME"]?></span>
<span class="price_text inb"><?=$arItem["PRICE_PRINT_DISCOUNT_VALUE"]?></span>
</label>
<? } ?>
</div>
</div>
<div class="summ">
<div class="sum1 inb">
<div class="sum_img inb">
<?if ($arResult["ELEMENT"]["DETAIL_PICTURE"]["src"]) { ?>
<img src="<?=$arResult["ELEMENT"]["DETAIL_PICTURE"]["src"]?>" alt="">
<? } else { ?>
<img src="<?=$this->GetFolder().'/images/no_foto.png'?>" class="bx-original-item-image" alt="">
<? } ?>
</div>
<div class="sum_text inb">
<p class="stext1">
<?=$arResult["ELEMENT"]["NAME"]?>
<span class="db"></span>
</p>
<p class="stext2"><?= $arResult['ELEMENT']['PRICE_PRINT_VALUE'] ?></p>
</div>
</div>
<span class="inb plus">+</span>
<div class="sum1 inb">
<div class="sum_img inb"><img src="/images/icon2.png" alt=""></div>
<div class="sum_text inb">
<p class="stext1">Пакет услуг</p>
<p class="stext2 js-price-diff"><?= $arResult['SET_ITEMS']['PRICE_DIFF'] ?></p>
</div>
</div>
</div>
<div class="line"></div>
<div class="final">
<div class="final_text inb">
<div class="fin_text">Итого:</div>
<div class="fin_numb js-price" data-role="set-price" ><?=$arResult["SET_ITEMS"]["PRICE"]?></div>
</div>
<div class="final_but inb">
<a>КУПИТЬ КОМПЛЕКТ</a>
</div>
</div>
<div class="clear"></div>
</div>
<?
$arJsParams = array(
"numSliderItems" => count($arResult["SET_ITEMS"]["OTHER"]),
"numSetItems" => count($arResult["SET_ITEMS"]["DEFAULT"]),
"jsId" => $curJsId,
"parentContId" => "bx-set-const-".$curJsId,
"ajaxPath" => $this->GetFolder().'/ajax.php',
"canBuy" => $arResult["ELEMENT"]["CAN_BUY"],
"currency" => $arResult["ELEMENT"]["PRICE_CURRENCY"],
"mainElementPrice" => $arResult["ELEMENT"]["PRICE_DISCOUNT_VALUE"],
"mainElementOldPrice" => $arResult["ELEMENT"]["PRICE_VALUE"],
"mainElementDiffPrice" => $arResult["ELEMENT"]["PRICE_DISCOUNT_DIFFERENCE_VALUE"],
"mainElementBasketQuantity" => $arResult["ELEMENT"]["BASKET_QUANTITY"],
"lid" => SITE_ID,
"iblockId" => $arParams["IBLOCK_ID"],
"basketUrl" => $arParams["BASKET_URL"],
"setIds" => $arResult["DEFAULT_SET_IDS"],
"offersCartProps" => $arParams["OFFERS_CART_PROPERTIES"],
"itemsRatio" => $arResult["BASKET_QUANTITY"],
"noFotoSrc" => $this->GetFolder().'/images/no_foto.png',
"messages" => array(
"EMPTY_SET" => GetMessage('CT_BCE_CATALOG_MESS_EMPTY_SET'),
"ADD_BUTTON" => GetMessage("CATALOG_SET_BUTTON_ADD")
)
);
?>
<sc ript type="text/javascript">
BX.ready(function(){
new BX.Catalog.SetConstructor(<?=CUtil::PhpToJSObject($arJsParams, false, true, true)?>);
});
</sc ript> |
Раньше было 2 списка. Те которые добавлены в комплект с крестиками чтобы убрать из комплекта и те, которые не добавлены с кнопкой добавить. и обрабатывались кнопки так
Код |
---|
BX.bindDelegate(this.setItemsCont, 'click', { 'attribute': 'data-role' }, BX.proxy(this.deleteFromSet, this));
BX.bindDelegate(this.sliderItemsCont, 'click', { 'attribute': 'data-role' }, BX.proxy(this.addToSet, this)); |
Теперь я хочу добавлять и удалять посредством чекбокса. Сделал функцию, которая пока выводит консоль лог для проверки того что это будет работать
Код |
---|
SetConstructor.prototype.changeToSet = function() {
console.log(123);
};
|
В ней я собирался проверять свойство "чекнутости" чекбокса. Если чекнут добавить если нет то убрать по событию change
Код |
---|
BX.bindDelegate(this.setItemsCont, 'change', {tag: 'INPUT', props: {type: 'checkbox'}}, BX.proxy(this.changeToSet, this)); |
Но вот почемуто не работает. Я не понимаю как работает привязка событий js к кнопкам и тп. Делал наподобие того что видел. Если может кто помочь помогите пжлста