Довольно частная задача: преподносить покупателю подарки при покупке товара. "Подарком" может быть бесплатная упаковка, дополнительный дешевенький аксессуар или просто бесплатный товар.[spoiler]
Сначала нужно привязать к товару эти самые "подарки". Это делается посредством создания множественного свойства инфоблока типа "Привязка к элементу". Собственно, создаём такое свойство, задаём ему символьный код "PRESENT", в настройках свойства указываем инфоблок, из которого будем брать бесплатные товары.
Затем переходим к редактированию элемента инфоблока, для которого создали свойство, и выбираем товары-подарки.
2. В /bitrix/php_interface/init.php вставляем обработчик события OnBasketAdd, который будет добавлять товары-подарки в корзину с нулевой ценой:
и обработчик события OnBasketDelete, в котором товары-подарки будут удаляться из корзины, если из корзины удаляется товар, за покупку которого подарки и были предоставлены.
Теперь при добавлении товара в корзину, если к нему привязаны бесплатные товары, то и они будут добавляться в корзину нулевой ценой. Для того, чтобы отображать полагающиеся за покупку подарки нужно кастомизировать шаблон компонента. Пример подобной кастомизации здесь. В шаблон добавлен result_modifi. Вы глядит всё это примерно так:
Интересно конечно, но стоило бы добавить в статье - что это еще не готовое решение а идея
Сразу бросается в глаза - кол-во бесплатных подарков то тоже не неограниченно верно? Тогда...
1. Запретить изменение кол-ва "подарочных" товаров в корзине (по крайней мере увеличение) 2. Запретить добавление товара в корзину (имею ввиду подставляя id товара в url) 3. При заказе товара - делать (на всякий случай) перепроверку, что кол-во "подарочных" товаров в корзине соответствует (а не больше) расчетного значения
Поправлю, когда поля будут передаваться ссылкой в обработчики событий добавления и обновления элемента корзины. В плане работ уже стоит.
Пока для решения задачи нужно кастомизировать компоненты каталога и корзины + написание коллбэка.
Добавлю в выложенный компонент заглушку, параметр - "инфоблок подарков" и проверку принадлежности добавляемого в корзину товара к инфоблоку подарков, что закроет пункт номер 2.
Я, возможно вообще бы пошел по другому пути, если бы встала задача. Менее проблемным мне кажется вообще до самого факта заказа не добавлять подарок в корзину, а выводить их списком, беря из свойств элементов. Единственный минус - от подарка нельзя отказаться или изменить количество )))
При повторе заказа - подарки из корзины естественно удалять Пользователю запретить самостоятельно добавлять в свою корзину товары из этого инфоблока Чуть больше модифицировать шаблон корзины (вывод подарков по привязке из свойств, а не из реальной корзины) - и проблемы "накрутки" подарков сами пропадут...
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».