Создание и редактирование прайс-листа
Создавать и изменять прайс-листы можно с помощью пользовательских событий. Вы можете написать собственный PHP-код, который внесет изменения в прайс-лист при срабатывании события.
Подробнее о событиях см. в курсе Разработчик Bitrix Framework.
Создание прайс-листа выполняется в три шага:
1. Запрос и дополнение данных
На этом этапе из базы данных сайта выбирается информация на основе данных из формы редактирования прайс-листа.
Список событий
- onExportRootExtendData — изменение корневого элемента YML-файла;
- onExportOfferExtendData — изменение элемента
<offer>
; - onExportCategoryExtendData — изменение элемента
<category>
; - onExportCurrencyExtendData — изменение элемента
<currency>
.
Подробнее об элементах, использующихся для описания товара, см. в Справке Маркета для модели ADV.
Параметры события
Параметр | Описание | Массив |
---|---|---|
TAG_VALUE_LIST | Список значений. | |
ELEMENT_LIST | Список данных предложений. | Поля $elementRow:
|
CONTEXT | Контекст выгрузки. | |
PARENT_LIST | Данные родительских элементов торговых предложений. Присутствует только в событии onExportOfferExtendData. | Поля $parentRow:
|
Параметр | Описание | Массив |
---|---|---|
TAG_VALUE_LIST | Список значений. | |
ELEMENT_LIST | Список данных предложений. | Поля $elementRow:
|
CONTEXT | Контекст выгрузки. | |
PARENT_LIST | Данные родительских элементов торговых предложений. Присутствует только в событии onExportOfferExtendData. | Поля $parentRow:
|
Пример. Добавление дополнительных параметров запроса к элементу url
use Bitrix\Main; use Yandex\Market; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('yandex.market', 'onExportOfferExtendData', function(Main\Event $event) { /** @var $tagValueList Market\Result\XmlValue[] */ /** @var $elementList array */ /** @var $context array */ /** @var $parentList array */ $tagValueList = $event->getParameter('TAG_VALUE_LIST'); $elementList = $event->getParameter('ELEMENT_LIST'); $context = $event->getParameter('CONTEXT'); $parentList = $event->getParameter('PARENT_LIST'); foreach ($tagValueList as $elementId => $tagValue) { $element = $elementList[$elementId]; $parent = null; $urlQueryParams = [ 'setup_id' => $context['SETUP_ID'], 'offer_id' => $element['ID'] ]; if (isset($element['PARENT_ID'])) { $parent = $parentList[$element['PARENT_ID']]; $urlQueryParams['parent_id'] = $parent['ID']; } $tagUrlValue = $tagValue->getTagValue('url'); $tagUrlValue .= (strpos($tagUrlValue, '?') === false ? '?' : '&') . http_build_query($urlQueryParams); $tagValue->setTagValue('url', $tagUrlValue); } });
Скопировано
Пример. Установка атрибута available на основании mt_rand
use Bitrix\Main; use Yandex\Market; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('yandex.market', 'onExportOfferExtendData', function(Main\Event $event) { /** @var $tagValueList Market\Result\XmlValue[] */ $tagValueList = $event->getParameter('TAG_VALUE_LIST'); foreach ($tagValueList as $elementId => $tagValue) { $tagValue->setTagAttribute('offer', 'available', mt_rand(0, 100) > 50); } });
Скопировано
2. Создание и изменение элементов
На этом этапе данные представляются в формате YML. Вы можете изменить содержимое элемента:
- для отмены записи элементов в файл;
- для добавления элементов и атрибутов, которые не описаны в формате выгрузки.
Список событий
- onExportRootWriteData — изменение корневого элемента YML-файла;
- onExportOfferWriteData — изменение элемента
<offer>
; - onExportCategoryWriteData — изменение элемента
<category>
; - onExportCurrencyWriteData — изменение элемента
<currency>
.
Параметры события
Параметр | Описание | Массив |
---|---|---|
TAG_RESULT_LIST | Список значений. | |
ELEMENT_LIST | Список данных предложений. | Поля $elementRow:
|
CONTEXT | Контекст выгрузки. | |
PARENT_LIST | Данные родительских элементов торговых предложений. Присутствует только в событии onExportOfferExtendData. | Поля $parentRow:
|
Параметр | Описание | Массив |
---|---|---|
TAG_RESULT_LIST | Список значений. | |
ELEMENT_LIST | Список данных предложений. | Поля $elementRow:
|
CONTEXT | Контекст выгрузки. | |
PARENT_LIST | Данные родительских элементов торговых предложений. Присутствует только в событии onExportOfferExtendData. | Поля $parentRow:
|
Пример. Добавление элементов и атрибутов
use Bitrix\Main; use Yandex\Market; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('yandex.market', 'onExportOfferWriteData', function(Main\Event $event) { /** @var $tagResultList Market\Result\XmlNode[] */ /** @var $elementList array */ /** @var $context array */ /** @var $parentList array */ /** @var $tagElement \SimpleXMLElement */ $tagResultList = $event->getParameter('TAG_RESULT_LIST'); $elementList = $event->getParameter('ELEMENT_LIST'); $context = $event->getParameter('CONTEXT'); $parentList = $event->getParameter('PARENT_LIST'); foreach ($tagResultList as $elementId => $tagResult) { if ($tagResult->isSuccess()) { $tagNode = $tagResult->getXmlElement(); $element = $elementList[$elementId]; $parent = null; $tagNode->addChild('setup_id', $context['SETUP_ID']); $tagNode->addChild('offer_id', $element['ID']); if (isset($element['PARENT_ID'])) { $parent = $parentList[$element['PARENT_ID']]; $tagNode->addChild('offer_id', $parent['ID']); } $tagNode->addAttribute('custom', 'Y'); $tagResult->invalidateXmlContents(); } } });
Скопировано
Пример. Отмена выгрузки товаров, недоступных для продажи
use Bitrix\Main; use Yandex\Market; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('yandex.market', 'onExportOfferWriteData', function(Main\Event $event) { /** @var $tagResultList Market\Result\XmlNode[] */ /** @var $tagElement \SimpleXMLElement */ $tagResultList = $event->getParameter('TAG_RESULT_LIST'); foreach ($tagResultList as $elementId => $tagResult) { if ($tagResult->isSuccess()) { $tagNode = $tagResult->getXmlElement(); $attributeList = $tagNode->attributes(); if (!isset($attributeList['available']) || (string)$attributeList['available'] !== 'true') { $tagResult->invalidate(); } } } });
Скопировано
3. Запись в файл
На этом этапе собранная информация о товарах добавляется в прайс-лист и обновляется в YML-файле.
- Если вы создали новый файл, устраните ошибки и укажите ссылку на новый файл в кабинете на Маркете. Подробнее см. раздел Как сформировать YML-файл и устранить ошибки.
- Если вы отредактировали файл и ранее указывали ссылку на него в кабинете на Маркете, информация обновится автоматически, а ссылка останется прежней.