Добавление товара в корзину средствами Bitrix Framework


Нюанс добавления товара в корзину интернет-магазина на Битриксе средствами API заключается в том, что по-умолчанию для реализации опции проверки есть ли товар уже в корзине Битрикс (чтобы не добавлять товар второй раз, а изменить его количество во избежании конфликта с публичным функционалом корзины) используется функция getExistsItem(), для корректной работы которой необходимо помимо ID товара также передать его дополнительные свойства. В данном примере передаются два основных свойства: CATALOG.XML_ID и PRODUCT.XML_ID характерные для базовой реализации большинства интернет-магазинов, но если в вашем магазине используются дополнительные параметры (например: цвет, размер), то их необходимо передать аналогичным образом. Базово код выглядит следующим образом:

if (CModule::IncludeModule("sale")) {
    // задаем параметры товара
    $item = array( 
        'productId' => 396, // id товара
        'quantity' => 1, // количество
        'catalogXmlId' => "8cb106d7-4c66-472a-a2a1-8b94d6b58b2a", // свойство xmlId каталога
        'productXmlId' => "136c31c5-9717-11e8-80ef-0050569b5007" // свойство xmlId товара
    ) 

    // загружаем текущую корзину пользователя
    $basket = Basket::loadItemsForFUser( 
        Sale\Fuser::getId(), 
        Context::getCurrent()->getSite() 

    ); 

    // если в корзине товар есть - меняем количество
    if ($basketItem = $basket->getExistsItem('catalog', $item["productId"], [ 
        0 => ['CODE' => 'CATALOG.XML_ID', 'VALUE' => $item["catalogXmlId"]], 
        1 => ['CODE' => 'PRODUCT.XML_ID', 'VALUE' => $item["productXmlId"]], 
    ])) {  
        if ((int)$item["quantity"] <= 0) { 
            $basketItem->delete(); 
        } else { 
            $basketItem->setField("QUANTITY", $item["quantity"]); 
        }
    // если в корзине товара нет - добавляем
    } else { 
        // добавляем товар
        $basketItem = $basket->createItem("catalog", $item["productId"]); 
        $basketItem->setFields([  
            "LID" => \Bitrix\Main\Context::getCurrent()->getSite(),  
            "QUANTITY" => $item["quantity"], 
            "CATALOG_XML_ID" => $item["catalogXmlId"], 
            "PRODUCT_XML_ID" => $item["productXmlId"], 

        ]); 
        // добавляем свойства
        $collection = $basketItem->getPropertyCollection(); 
        $prop1 = $collection->createItem(); 
        $prop1->setFields( 
            [
                'NAME' => 'Catalog XML_ID',  
                'CODE' => 'CATALOG.XML_ID',  
                'VALUE' => $item["catalogXmlId"] 
            ] 

        ); 
        $prop2 = $collection->createItem(); 
        $prop2->setFields( 
           [ 
                'NAME' => 'Product XML_ID',  
                'CODE' => 'PRODUCT.XML_ID',  
                'VALUE' => $item["productXmlId"] 
           ] 
        ); 
    } 
    // сохраняем корзину с изменениями
    $basket->save(); 
} 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *