Если у товара есть торговые предложения - не добавлять его в корзину, а переходить в его карточку
Представим себе некий готовый магазин с обычными товарами. А потом решили добавить раздел со SKU-товарами. К примеру, телефоны с разными цветами. Получаем ситуацию - некоторые товары (которые были) по клику на корзину должны добавляться как и раньше в корзину, а товары со SKU редиректить пользователя на карточку товара.
Решение из разряда "пока и так сойдет", но может в некоторых случаях подойдет и на постоянку.
Все решается одним обработчиком событий:
<?php
AddEventHandler('sale', 'OnBeforeBasketAdd', array('CSaleHandlers', 'OnBeforeBasketAddHandler'));
class CSaleHandlers {
public static function OnBeforeBasketAddHandler($arFields) {
if ($arFields['MODULE']=='catalog' && $arFields['PRODUCT_ID']>0 && CModule::IncludeModule('iblock')) {
if ($arElement = CIBlockElement::GetByID($arFields['PRODUCT_ID'])->GetNext()) {
if ($arIB = CCatalog::GetByID($arElement['IBLOCK_ID'])) {
if ($arIB['OFFERS_IBLOCK_ID'] > 0) {
if (CIBlockElement::GetList(array(), array( 'IBLOCK_ID' => $arIB['OFFERS_IBLOCK_ID'],
'=PROPERTY_CML2_LINK' => $arElement['ID'],
'ACTIVE' => 'Y'))->Fetch()
) {
LocalRedirect($arElement['DETAIL_PAGE_URL']);
}
}
}
}
}
}
} |
Пробежимся по if-ам:
1. Проверка, подключенрие.
2. Дергаем поля товара.
3. Дергаем часть инфоблока, которая является каталогом.
4. Если у инфоблока есть торговые предложения ...
5. ... проверяем есть ли SKU для данного родительского товара. И если есть, то редиректим на карточку родительского.
Таким образом получаем, что сам родительский товар не может быть добавлен в корзину никаким образом.
Назад в раздел