Введение и базовые концепции
Модуль Торговый каталог добавляет к элементам инфоблоков инструменты для продажи товаров.
-
Инфоблок хранит карточку товара.
-
Каталог хранит торговые данные товара.
Торговый каталог не заменяет модуль Информационные блоки. Для работы с товарами нужны оба модуля: iblock отвечает за структуру контента, а catalog добавляет данные, которые нужны для продажи и складского учета.
Подробнее о модуле Информационные блоки
Модуль Торговый каталог работает вместе с модулем Интернет-магазин. Каталог хранит товары, цены и остатки, а Интернет-магазин использует эти данные в корзине и заказах.
Основные термины
Инфоблок товаров — инфоблок, в котором хранятся карточки товаров: названия, описания, изображения, свойства и разделы.
Каталог — инфоблок товаров, подключенный к модулю catalog. После подключения элементы инфоблока можно продавать как товары. К товарам можно добавлять цены, остатки, НДС, единицы измерения и другие параметры для продажи.
Товар — элемент инфоблока, у которого есть данные для продажи: цена, остаток, доступность и другие параметры.
Тип товара — признак, который показывает, как товар продается. Например, товар с торговыми предложениями продается через варианты, комплект состоит из нескольких товаров, услуга не требует складского остатка.
Торговое предложение — вариант товара со своим размером, цветом или комплектацией. У каждого предложения могут быть свои цена, остаток и доступность.
Цена — стоимость товара или торгового предложения. Цена относится к типу цены и валюте.
Тип цены — категория цены, например розничная или оптовая. Права на тип цены задают, кто может видеть эту цену и покупать по ней.
НДС — налоговая ставка. В товаре указывают ставку и признак, который показывает, входит ли НДС в цену.
Единица измерения — способ измерить товар: штука, упаковка, метр или другое значение.
Склад — место хранения товара. Модуль хранит общий остаток товара и остатки по конкретным складам.
Складской документ — документ движения товара: приход, списание, перемещение, возврат или корректировка.
Скидка и купон — правила изменения цены и коды, по которым покупатель получает скидку. Скидки можно привязать к товарам, разделам, группам пользователей и другим условиям.
Подписка на товар — уведомление о появлении товара, которого сейчас нет в наличии.
Простые товары и торговые предложения
Простой товар продается как один элемент инфоблока. У него есть собственные цены, остатки и параметры доступности.
Для товаров с вариантами создавайте торговые предложения. Товар с торговыми предложениями использует два инфоблока. Родительский товар хранит общее описание, а инфоблок предложений хранит варианты товара. Каждое предложение имеет собственные цены и остатки, поэтому покупатель добавляет в корзину конкретное предложение.
Как устроены данные
Товар состоит из двух связанных частей.
-
Элемент инфоблока хранит контент и пользовательские свойства.
-
Запись в таблицах модуля Торговый каталог хранит торговые параметры.
Идентификатор товара совпадает с идентификатором элемента инфоблока. Например, поле ID в таблице b_catalog_product ссылается на элемент инфоблока, а поле PRODUCT_ID в b_catalog_price ссылается на тот же товар.
|
Где хранится |
Данные |
|
Инфоблок |
Название, символьный код, изображения, описания, разделы, пользовательские свойства |
|
Торговый каталог |
Тип товара, цены, остатки, доступность, НДС, единицы измерения, склады, скидки, связь с торговыми предложениями |
Подробнее в статье Схема работы торгового каталога и основные объекты.
Настройки в интерфейсе продукта
Настройки модуля находятся в разделе Настройки > Настройки продукта > Настройки модулей > Торговый каталог. На странице задают общее поведение каталога:
-
настройки карточки товара: сохранение товаров без цен, работу с диапазонами цен, показ вкладки Торговый каталог,
-
значения товарных параметров по умолчанию: количественный учет, покупку при отсутствии товара, подписку на отсутствующий товар,
-
складской учет и резервирование,
-
хранение просмотренных товаров,
-
поведение формы выбора товаров,
-
параметры подписки на товары,
-
настройки экспорта и импорта,
-
связь инфоблоков с торговым каталогом и инфоблоками предложений,
-
права доступа к модулю.
Модель каталога строится вокруг элемента инфоблока и товарных записей. Определите структуру инфоблоков и настройте торговые каталоги. После этого добавляйте товары, цены и остатки.
Данные каталогов настраивают на отдельных страницах административного интерфейса.
-
Инфоблок товаров, свойства, разделы и элементы — в разделе Контент.
-
Торговые предложения — в связанном инфоблоке предложений в разделе Контент.
-
Типы цен, НДС, единицы измерения, склады — в разделе Магазин.
Компоненты каталога
Для вывода каталога на сайте используйте компоненты. Компонент получает данные из инфоблоков и торгового каталога, применяет параметры показа и передает результат в шаблон.
Компоненты позволяют вывести список разделов, список товаров, детальную страницу товара, торговые предложения, цены, доступность и элементы корзины. Конкретный набор данных зависит от параметров компонента и шаблона.
Подробнее о работе компонентов читайте в статье Компоненты.
API модуля
Перед использованием API подключите модули iblock и catalog.
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');
В модуле торгового каталога нет универсального API. Выбор зависит от задачи.
-
D7-модели каталога используйте для операций, которые меняют товарные данные. Для товарных параметров применяйте
\Bitrix\Catalog\Model\Product, для цен —\Bitrix\Catalog\Model\Price. Модели проверяют данные, вызывают события модуля и возвращают результат с ошибками, если операция не выполнена. -
D7 ORM-классы
*Tableиспользуйте для чтения данных и работы со справочниками каталога. С помощью этих классов можно получить типы цен, НДС, единицы измерения, склады, остатки и подписки. Прямая запись в таблицы каталога может нарушить связи между товаром, ценами, остатками и доступностью. -
Классическое API используйте там, где для сценария нет полной D7-замены. Например, через классические методы создают связь инфоблока с каталогом, настраивают связь с торговыми предложениями и проводят складские документы.
Пример. Подключим модули, зарегистрируем инфоблок как простой торговый каталог, получим базовый тип цены, добавим товарные параметры к элементу инфоблока и создадим цену.
// Перед запуском примера подготовьте:
// $productIblockId — идентификатор инфоблока товаров
// $productId — идентификатор элемента инфоблока, который станет товаром
// Подключить модули для работы с инфоблоками и торговым каталогом
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');
// Зарегистрировать инфоблок как простой торговый каталог без торговых предложений
$catalogCreated = \CCatalog::Add([
'IBLOCK_ID' => $productIblockId,
'YANDEX_EXPORT' => 'N',
'SUBSCRIPTION' => 'Y',
'VAT_ID' => 0,
'PRODUCT_IBLOCK_ID' => 0,
'SKU_PROPERTY_ID' => 0,
]);
if (!$catalogCreated)
{
throw new \RuntimeException('Не удалось создать торговый каталог');
}
// Получить базовый тип цены для добавления цены товара
$basePriceType = \Bitrix\Catalog\GroupTable::getBasePriceType();
if (!$basePriceType)
{
throw new \RuntimeException('Базовый тип цен не найден');
}
$basePriceTypeId = (int)$basePriceType['ID'];
// Добавить товарные параметры к элементу инфоблока
$productResult = \Bitrix\Catalog\Model\Product::add([
'ID' => $productId,
'TYPE' => \Bitrix\Catalog\ProductTable::TYPE_PRODUCT,
'QUANTITY' => 15,
'QUANTITY_TRACE' => 'Y',
'CAN_BUY_ZERO' => 'N',
'SUBSCRIBE' => 'Y',
]);
// Проверить результат создания товара
if (!$productResult->isSuccess())
{
throw new \RuntimeException(implode('; ', $productResult->getErrorMessages()));
}
// Добавить базовую цену товара
$priceResult = \Bitrix\Catalog\Model\Price::add([
'PRODUCT_ID' => $productId,
'CATALOG_GROUP_ID' => $basePriceTypeId,
'PRICE' => 1250.00,
'CURRENCY' => 'RUB',
]);
// Проверить результат создания цены
if (!$priceResult->isSuccess())
{
throw new \RuntimeException(implode('; ', $priceResult->getErrorMessages()));
}
Подробнее про устройство каталога читайте в статье Схема работы торгового каталога и основные объекты.
Практические сценарии описаны в статьях Как выбрать API торгового каталога, Базовые настройки каталога и Работа с товарами и торговыми предложениями.