Я столкнулся с проблемой создания надписи на месте кнопки количества и добавить в корзину. Надпись должна была быть в виде "3 ШТ. В КОРЗИНЕ". т.е количество сколько находиться в корзине. Скажу скразу опыт у меня работы с битрексом составляет меньше месяца. Это первый интернет магазин, причем здесь очень много наворотов которые я бы не стал делать на сайте. Но раз требуется то требуется...
изменения я делал в ваш шаблон\components\bitrix\catalog\catalog\bitrix\catalog.section\.default
Нам необходимо количество товара в корзине и его ID.
при помощи метода GetList мы получаем массив к примеру Array ( [0] => Array ( [PRODUCT_ID] => 25 [QUANTITY] => 3.00 ) )
Теперь у нас есть 1 объект с данными PRODUCT_ID и QUANTITY.
мы должны создать проверку на совпадение PRODUCT_ID с ID нашего каталога. Проблема в том что у нас идет цикл внешней со своей выдачей ID товара и что бы отсортировать верно необходимо создать цикл с проверкой ID товара в каталоге и PRODUCT_ID в корзине.
с создал вот так.
Теперь проверка на является ли этот товар в корзине
3.00 ШТ. В КОРЗИНЕ
Немного нелепо смотрится))
дальше условие else
С 1 стороны это готовое решение. Заменить необходимо только классы CSS.
Ниже я покажу вам функцию на создание селекта.
Само собой, для работы этой функции, необходимо в шапке вашего сайта, в head блоке создать подключение
Это первая моя статья. Если комментируете, то делайте это с уважением. Надеюсь кому-то пригодиться...
ПС. В хроме и в firefox есть проблемы. заметил потом как проверил на ie9 и opera . в них все супер.
изменения я делал в ваш шаблон\components\bitrix\catalog\catalog\bitrix\catalog.section\.default
$arBasketItems = array(); //Создадим пустой массив
// Документация по использованию
http://dev.1c-bitrix.ru/api_help/sale/classes/csalebasket/csalebasket__getlist.4d82547a.php
$dbBasketItems = CSaleBasket::GetList(
array(
"NAME" => "ASC",
"ID" => "ASC"
),
array(
"FUSER_ID" => CSaleBasket::GetBasketUserID(),
"LID" => SITE_ID,
"ORDER_ID" => "NULL"
),
false,
false,
array(
"PRODUCT_ID",
"QUANTITY",
)
);
while ($arItems = $dbBasketItems->Fetch())
{
if (strlen($arItems["CALLBACK_FUNC"]) > 0)
{
CSaleBasket::UpdatePrice($arItems["PRODUCT_ID"],
$arItems["QUANTITY"]);
$arItems = CSaleBasket::GetByID($arItems["ID"]);
}
$arBasketItems[] = $arItems;
} |
при помощи метода GetList мы получаем массив к примеру Array ( [0] => Array ( [PRODUCT_ID] => 25 [QUANTITY] => 3.00 ) )
Теперь у нас есть 1 объект с данными PRODUCT_ID и QUANTITY.
мы должны создать проверку на совпадение PRODUCT_ID с ID нашего каталога. Проблема в том что у нас идет цикл внешней со своей выдачей ID товара и что бы отсортировать верно необходимо создать цикл с проверкой ID товара в каталоге и PRODUCT_ID в корзине.
с создал вот так.
$ess=0;
for ($i = $k; $i <= 9; $i++) {
if($arResult["ITEMS"][$j]["ID"]==$arBasketItems[$i]["PRODUCT_ID"]){
$ess=1; // 1 из вариантов указания того что совпадение произошло
$cat=$i; // указывает какой именно объект был использован для сравнения.
}
}
$j++; // мы прибавляем номер объекта, потому что мы его больше использовать не будим. Как говорить он выбил из игры.
|
Теперь проверка на является ли этот товар в корзине
if($ess == 1){
?>
<span class="button added"><?=(int) ($arBasketItems[$cat]["QUANTITY"]);?> ШТ. В КОРЗИНЕ</span>
<?
}else{
?> |
<?=(int) ($arBasketItems[$cat]["QUANTITY"]);?> это означает что я перевожу в integer - Целое число. если мы это не сделаем то у нас получиться вот так - |
3.00 ШТ. В КОРЗИНЕ
Немного нелепо смотрится))
дальше условие else
<span class="button">
<fo rm action="<?=POST_FORM_ACTION_URI?>" method="post" enctype="multipart/form-data">
<div class="selecter_body">
// Инпут дает возможность нам добавлять в корзину количество товара
<input type="text" name="<?echo $arParams["PRODUCT_QUANTITY_VARIABLE"]?>" value="0" size="1" class="counter_js"/>
// прошу заметиться
class="counter_js" - это не класс, это у меня обращение к функции, которая превращает инпут в переключение количества как селект.
</div>
<?foreach($arElement["PRODUCT_PROPERTIES"] as $pid => $product_property):?>
<?if(
$arElement["PROPERTIES"][$pid]["PROPERTY_TYPE"] == "L"
&& $arElement["PROPERTIES"][$pid]["LIST_TYPE"] == "C"
):?>
<?foreach($product_property["VALUES"] as $k => $v):?>
<label><input type="radio" name="<?echo $arParams["PRODUCT_PROPS_VARIABLE"]?>[<?echo $pid?>]" value="<?echo $k?>" <?if($k == $product_property["SELECTED"]) echo '"checked"'?>><?echo $v?></label><br>
<?endforeach;?>
<?else:?>
<select name="<?echo $arParams["PRODUCT_PROPS_VARIABLE"]?>[<?echo $pid?>]">
<?foreach($product_property["VALUES"] as $k => $v):?>
<option value="<?echo $k?>" <?if($k == $product_property["SELECTED"]) echo '"selected"'?>><?echo $v?></option>
<?endforeach;?>
</select>
<?endif;?>
<?endforeach;?>
<input type="hidden" name="<?echo $arParams["ACTION_VARIABLE"]?>" value="BUY">
<input type="hidden" name="<?echo $arParams["PRODUCT_ID_VARIABLE"]?>" value="<?echo $arElement["ID"]?>">
<div class="float_right">
<input class="button_pink" type="s ubmit" name="<?echo $arParams["ACTION_VARIABLE"]."ADD2BASKET"?>" value="<?echo GetMessage("CATALOG_ADD")?>">
</div>
</form>
<div class="clrfix"></div></span>
<?
}
?>
|
С 1 стороны это готовое решение. Заменить необходимо только классы CSS.
Ниже я покажу вам функцию на создание селекта.
$(docu ment).ready(f unction() {
counter('.counter_js');
$('.popup .bg').click(f unction() { popup(false); });
});
function counter(obj)
{
$this = $(obj);
$p = $("#id").val(); // Проба
window .p = $("#id").val(); // Проба
$this.each(f unction(i,v) {
$(v).hide();
$(v).after('<div class="count_selecter" id="cs_'+i+'"><div class="num">'+$this.attr('value')+'</div><div class="arrows"><span class="up"></span><span class="down"></span></div></div>');
$('#cs_'+i+' .arrows .up').click(f unction() { $(v).attr('value', (parseInt($(v).attr('value'))+1)); $('#cs_'+i+' .num').html($(v).attr('value')); });
$('#cs_'+i+' .arrows .down').click(f unction() { if($(v).attr('value') <= 0) {return false} $(v).attr('value', (parseInt($(v).attr('value'))-1)); $('#cs_'+i+' .num').html($(v).attr('value')); });
})
} |
<sc ript type="text/javascript" src="/bitrix/templates/ ваш сайт /js/slides.min.jquery.js"></sc ript>
<sc ript type="text/javascript">
$(f unction(){
$('#slides').slides({
generatePagination: true
});
});
</sc ript>
|
Это первая моя статья. Если комментируете, то делайте это с уважением. Надеюсь кому-то пригодиться...
ПС. В хроме и в firefox есть проблемы. заметил потом как проверил на ie9 и opera . в них все супер.