Я столкнулся с проблемой создания надписи на месте кнопки количества и добавить в корзину. Надпись должна была быть в виде "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 . в них все супер.