Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины, все другие товары- предупредив пользователя.
Для начала создадим новое свойство для товаров каталога, в моем случае называется "Покупается отдельно" с кодом "ATT_B_ONLY". Обязательно, проставляем ему галку Значение добавляется в корзину
Выводим оповещение о удалении в корзине
Переходим в шаблон корзины (sale.basket.basket) и создаем тут файл result_modifier.php, в который добавляем следующий код:
foreach ($arResult['GRID']['ROWS'] as $basketItem) {
foreach ($basketItem['PROPS'] as $basketItemProp) {
if ($basketItemProp['CODE'] == 'ATT_B_ONLY') {
$arResult['BASKET_ITEM_ONLY'][] = $basketItem['NAME'];
}
}
}
- Пребрали массив с товарами корзины.
- Внутри перебора, довыбрали свойства товаров.
- Если обнаружен товар со свойством "ATT_B_ONLY" добавили его название в ключ массива $arResult['BASKET_ITEM_ONLY'].
Ссылку на подробную информацию можно вывести на этой же странице, что бы не перенаправлять пользователя на новую. Достаточно воспользоваться заметкой
Показ страницы сайта в боковом слайдере
В template.php, добавляем оповещение с перечислением товаров из $arResult['BASKET_ITEM_ONLY']
В вашей корзине есть товары:
<strong>
<? echo implode(', ', $arResult['BASKET_ITEM_ONLY']) ?>
</strong>
Если продолжите оформление, другие товары будут удалены из корзины.<br>
<span id="show_coopon_about_panel">
Подробнее о купонах
</span>
Удаляем определенные товары из оформления заказа
Теперь, нам нужно удалить товары, у которых нет свойства с кодом "ATT_B_ONLY", из оформления заказа.
В шаблоне оформления заказа (sale.order.ajax) открываем или создаем (если еще нет) файл result_modifier.php и добавляем в него
foreach ($arResult['BASKET_ITEMS'] as $basketItem) {
foreach ($basketItem['PROPS'] as $basketItemProp) {
if ($basketItemProp['CODE'] !== 'ATT_B_ONLY') {
CSaleBasket::Delete($basketItem['ID']);
}
}
}
Здесь, ровно тоже самое: проходимся по товарам заказа, внутри по свойствам товара и если нет свойства с кодом "ATT_B_ONLY" удаляем товар (запись корзины) методом CSaleBasket::Delete
Можно дополнить условие, обработав товары методом CSaleBasket::Update - переложив не соответсвующие товары в отложенные корзины. Таким образом, пользователю не придется снова искать их в каталоге, сможет просто найти не попавшие в выборку товары в отложенных.