Добро пожаловать на сайт Bitrix Q&A, где вы можете задавать вопросы о программировании и разработке на Битрикс и получать быстрые и квалифицированные ответы от профессионалов!


есть ли документация официальная по javascript bitrix api? (меня интересует addToCart, но и в целом хотелось бы посмтореть все фунации что есть)

0 голосов
есть ли документация официальная по javascript bitrix api? (меня интересует addToCart, но и в целом хотелось бы посмтореть все фунации что есть)

в частности хотелось бы узнать можно ли этой функции передавать параметр количества товара которое нужно положить в корзину?

Речь идет о шаблоне бдитрикса на каталог. код следующий:
a
href="<?echo $arElement["ADD_URL"]?>"
class="catalog-item-buy<?/*catalog-item-in-the-cart*/?>"
rel="nofollow"
onclick="return addToCart(this, 'catalog_list_image_<?=$arElement['ID']?>', 'list', '<?=GetMessage("CATALOG_IN_CART")?>');"
id="catalog_add2cart_link_<?=$arElement['ID']?>"
>
<?echo GetMessage("CATALOG_ADD")?>
a
спросил 21 Май, 13 от FOOLKS (520 баллов)

6 Ответы

0 голосов
где функция лежит нашел. - в файле script.js в шаблоне сайта.
ответил 21 Май, 13 от FOOLKS (520 баллов)
0 голосов
Передать можно, но не так просто.
Есть 2 пути: первый - изменить в script.js кусок кода где сам запрос
Код
   $.get(
      element.href + "&ajax_buy=1&quantity=" + quantity,

Соответственно в quantity передавать количество. Но при этом придется изменять компонент catalog.detail, т.к. в нем количество жестко должно приходить в массиве $_POST
Код
$QUANTITY = intval($_POST[$arParams["PRODUCT_QUANTITY_VARIABLE"]]);

Меняем $_POST на $_GET или $_REQUEST и все работает.
2й путь - заменить в яваскрипте вызов $.get на $.post
ответил 21 Май, 13 от Ahbar (820 баллов)
0 голосов
Подскажите пожалуйста, где копать?
Добавление товара в корзину происходит по ссылке вида:
/catalog/xxx/?action=ADD2BASKET&id=4782
т.е. из секции, а не из детального просмотра.
пробую передать в этой же ссылке параметр quantity
  /catalog/xxx/?action=ADD2BASKET&id=4782&quantity=5
Но в корзину добавляется только 1шт.
В реальности конечно добавление товара происходит с помощью javascript bitrix
В каком файле происходит (должно происходить) отслеживание quantity в этом случае?
это сделал:
Код
$.get(
      element.href + "&ajax_buy=1&quantity=" + quantity,
 
но пока ничего не сработало...

P.S. 
ага, отследил запрос, который передается:
/catalog/xxx/?action=ADD2BASKET&id=4780&ajax_buy=1&quantity=[object%20HTMLCollection]
    :
  [object%20HTMLCollection] - это я что-то не так передаю?
ответил 08 Авг, 13 от ArchisWOW (140 баллов)
0 голосов
Исправил:

Код
$.get(
      element.href + "&ajax_buy=1&quantity=" + quantity,
на:


Код
$.get(
      element.href + "&ajax_buy=1&quantity=" + $('input[name*=quantity]').attr('value'),

Запрос теперь выглядит как:

/catalog/xxx/?action=ADD2BASKET&id=4780&ajax_buy=1&quantity=ABC
где ABC - это значение quantity выставленное по умолчанию:
<input type="text" name="<?echo $arParams["PRODUCT_QUANTITY_VARIABLE"]?>" value="ABC" size="2">
т.е. теперь осталось понять - как передать количество, которое указал покупатель...
:-)
как?
начинаю подозревать, что script.js вызывается до отправки товара в корзину...
соответственно и не отслеживаются изменения на странице.
P.S. хотя нет, видимо кэш мешал
сейчас запрос идет правильный, с указанием введенного количества, но в корзину добавляется только 1шт.!
ответил 08 Ноя, 13 от ArchisWOW (140 баллов)
0 голосов
Проверяю   $QUANTITY в файле bitrix/components/bitrix/catalog.section/component.php
Код
$QUANTITY = 0;
 $QUANTITY = intval($_GET[$arParams["PRODUCT_QUANTITY_VARIABLE"]]);
 if ($QUANTITY == "" or $QUANTITY == "0") 
 $QUANTITY = intval($_POST[$arParams["PRODUCT_QUANTITY_VARIABLE"]]);

и после всего этого   $QUANTITY = 0 !!!
т.е. не срабатывает ни POST ни GET
упрощаю задачу:

Код
$QUANTITY = 0;
 $QUANTITY = intval($_GET['quantity']);
 if ($QUANTITY == "" or $QUANTITY == "0")
 $QUANTITY = intval($_POST['quantity']);
 
вуаля!!! Всё работает! :D

всем (в смысле мне) спасибо за помощь! :D
посмотреть в работе можно тут:
http://deltatruck.ru/catalog/
Следующая задача - отображение и управление количеством товара в корзине прямо из секции каталога.
ответил 15 Фев, 14 от ArchisWOW (140 баллов)
0 голосов
Не понимаю как работало сразу или может я не заметил, но

Код
$.get(
      element.href + "&ajax_buy=1&quantity=" + $('input[name*=quantity]').attr('value'),
 
работает не корректно!

выражение   name*=quantity получает значение первого попавшегося поля input, а у меня ведь целый список товаров!
В итоге в корзину попадали товары с непрогнозируемым  количеством...
Переделал вот так:
В script.js:

Код
quan_id = element.href.match(/id=([\d]+)/);
   $.post(
      element.href + "&ajax_buy=1&quantity=" + $('input[name=quantity_'+quan_id[1]+']').attr('value'),
 
В bitrix/temlates/.. ./catalog.section/template.php


Код
<input type="text" class="quantity" name="quantity_<?=$arElement['ID']?>" value="1" size="2">
 
т.е. проиндексировал все input в соответствии с id товара, а в script.js уже с помощью этого индекса однозначно определяю количество.

Может есть и более изящное и простое решение, но мне пришло в голову только такое.
:)
ответил 06 Июнь, 14 от ArchisWOW (140 баллов)

Похожие вопросы

Управление продуктом: аналитика, разработка, продвижение