taurus2790
@taurus2790
Я не программер я только учусъ

Как в Bitrix проверить есть ли у товара подарки?

Уважаемые подскажите как можно сделать в карточке товара проверку на наличие подарка к товару?

Есть ли в bitrix api готовые методы?
  • Вопрос задан
  • 2584 просмотра
Решения вопроса 1
Я как то писал метод, который по id товара возвращает массив id подарков. Можете воспользоваться:
use Bitrix\Sale\Compatible\DiscountCompatibility;
use Bitrix\Sale\Basket;
use Bitrix\Sale\Discount\Gift;
use Bitrix\Sale\Fuser;

class DiscountsHelper
{
    /**
     * Возвращает массив id всех доступных подарков для товара
     *
     * @param int $productId - идентификатор товара
     * @return array - массив с id подарков для товара
     */
    public static function getGiftIds($productId)
    {
        $giftProductIds = [];

        if (!$productId) {
            return $giftProductIds;
        }

        DiscountCompatibility::stopUsageCompatible();

        $giftManager = Gift\Manager::getInstance();

        $potentialBuy = [
            'ID'                     => $productId,
            'MODULE'                 => 'catalog',
            'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
            'QUANTITY'               => 1,
        ];

        $basket = Basket::loadItemsForFUser(Fuser::getId(), SITE_ID);
        
        $basketPseudo = $basket->copy();

        foreach ($basketPseudo as $basketItem) {
            $basketItem->delete();
        }

        $collections = $giftManager->getCollectionsByProduct($basketPseudo, $potentialBuy);

        foreach ($collections as $collection) {
            /** @var \Bitrix\Sale\Discount\Gift\Gift $gift */
            foreach ($collection as $gift) {
                $giftProductIds[] = $gift->getProductId();
            }
        }

        DiscountCompatibility::revertUsageCompatible();

        return $giftProductIds;
    }
}


Суть в том, что мы создаем пустую псевдокорзину и на основе её определяем, есть ли для переданного товара подарки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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