В интерет магазинах есть свои компоненты, которые прекрасно себя зарекомендовали, такие как bitrix:catalog, bitrix:catalog.top, bitrix:eshopapp.top и другие. Их и рекомендуется кастомизировать, но как добавить товар используя API Битрикса?
Битрикс – добавить товар к заказу и перейти на страницу оформления
Как вы понимаете, если на странице будет код добавления, то при открытие такой страницы, товар моментально будет добавляться, что в принципе не очень хорошо (если, конечно, это не страница с благодарностью за покупку).
Итак наша задача: в небольшой форме вы просите выбрать количество товаров, которые добавятся к текущей корзине пользователя, и кнопка “Купить” или “Добавить в корзину”.
Наш HTML:
<form action="" method="POST"> <input type="text" value="1" class="order-input order-input-small" name="order-count"> <input type="submit" value="Заказать" class="order-btn-small"> </form>
Небольшая форма, без обработчика, которая сформирует массив $_POST, после отправки. Обязательно указываем name, в моем случае это order-count.
И наш код:
<? $PRODUCT_ID = 19103; if (CModule::IncludeModule("catalog")) { if ($_POST['order-count']) { Add2BasketByProductID( $PRODUCT_ID, $_POST['order-count'], false ); LocalRedirect("/personal/order/make/"); } } ?>
Итак, если в массиве $_POST есть order-count, то мы добавляем товар в корзину по ID (переменная $PRODUCT_ID), и переходим сразу на страницу оформления, не заходя в корзину.
ID товара можно также передать в форме, тогда наш код будет выглядеть так:
<form action="" method="POST"> <input type="text" value="1" class="order-input order-input-small" name="order-count"> <input type="hidden" value="19103" name="order-id"> <input type="submit" value="Заказать" class="order-btn-small"> </form> <? $PRODUCT_ID = $_POST['order-id']; $PRODUCT_COUNT = $_POST['order-count']; if (CModule::IncludeModule("catalog")) { if ($PRODUCT_ID && $PRODUCT_COUNT) { Add2BasketByProductID( $PRODUCT_ID, $PRODUCT_COUNT, false ); LocalRedirect("/personal/order/make/"); } } ?>
Это лишь один из вариантов и он просто быстрее, чем переделывать шаблон компонента catalog.top или любой другой из этого семейства. Я бы рекомендовал его использовать на продающих страницах (лендинг пейдж), т.к. не вижу смысла писать новый компонент ради 1 товара.