Задача: Как со страницы просмотра товара добавить в корзину данный товар сразу в n-ном количестве?
Решение:
Этот механизм можно реализовать немного переделав стандартный компонент.
К примеру возьмем компонент catalog.section
1. Копируем компонент в свою папку (копруем папку
/bitrix/components/bitrix/catalog.element в папку например:
/bitrix/components/demo/catalog.element) demo можно назвать во вашему желанию.
2. открываем файл:
/bitrix/components/demo/catalog.element/component.php - немного изменим добавление товара в корзину. Кусок кода компонета с изменениями:
| Код |
|---|
if (array_key_exists($arParams["ACTION_VARIABLE"], $_REQUEST) && array_key_exists($arParams["PRODUCT_ID_VARIABLE"], $_REQUEST))
{
$action = strtoupper($_REQUEST[$arParams["ACTION_VARIABLE"]]);
$productID = intval($_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]);
$productQuantity = intval($_REQUEST["num"]);
$arrFilter = [
'SECTION_ID' => $arResult["VARIABLES"]["SECTION_ID"],
];
if ($productQuantity <1 ) $productQuantity = 1;
if(($action == "ADD2BASKET" || $action == "BUY") && $productID > 0)
{
if(CModule::IncludeModule("iblock") && CModule::IncludeModule("sale") && CModule::IncludeModule("catalog"))
{
if(Add2BasketByProductID($productID, $productQuantity))
{
if($action == "BUY")
LocalRedirect($arParams["BASKET_URL"]);
else
LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"])));
}
else
{
if($ex = $GLOBALS["APPLICATION"]->GetException())
$strError = $ex->GetString();
else
$strError = GetMessage("CATALOG_ERROR2BASKET").".";
}
}
}
} |
Изменения от стандартного следующие:
- Добавили $productQuantity = intval($_REQUEST["num"]); - в переменной нам будет передаваться количество добавляемого товара и условия проверки значения этой переменной
- В функции Add2BasketByProductID($productID, $productQuantity) - добавили аргумент, определяющий количество добавляемого в корзину товара
- Добавили подключение фильта $arrFilter вручную, так как в случае использования параметра "BY_LINK"=> "Y", фильтр перестанет работать.
3. Теперь изменим шаблон. Примерный кусок кода:
| Код |
|---|
<fo rm action="<?echo $arElement["ADD_URL"]?>">
<input type="hidden" name="action" value="ADD2BASKET" />
<input type="hidden" name="id" value="<?=$arElement["ID"]?>" />
<input type="hidden" name="SECTION_ID" value="<?=$arResult["ID"]?>" />
<input type="hidden" name="clear_cache" value="Y" />
<input type="submit" value="Заказать" style="display:none;" />
<input type="text" name="num" value="1" />
<input type="submit" value="Добавить в корзину" />
</form> |
Теперь в дополнительном поле можно задать количество добавляемого товара.
P.S. Пример немного упрощенный, но рабочий (по хорошему можно добавить параметр компонента, который будет определять имя переменной в которой передается кол-во)