Задача довольно распространенная, однако, почему-то, вызывает трудности у большинства клиентов. Сама логика формирования YML файла заложена в ядре продукта - в /bitrix/modules/catalog/load/yandex_run.php. Однако, данный файл подключается не на прямую, а через обертку - /bitrix/php_interface/include/catalog_export/yandex_run.php, что оставляет нам шанс изменить логику формирования без правки ядра продукта. [spoiler]
Файл /bitrix/modules/catalog/load/yandex_run.php мы копируем в /bitrix/php_interface/include/catalog_export/ с заменой, затем вносим правку, чтобы реализовать свою логику.
Например, нам нужно добавить очень важный тег sales_notes - нужен для информации о необходимости предоплаты, о том, что товар только под заказ, об акциях и прочей мелкой, но важной информации. Судя по документации, он должен идти сразу после тега description (описания).
Добавим в начало файла строку (содержание тега можно вписать на свой вкус):
$sales_notes_value = "Под заказ";
Затем ищем, где формируются теги для каждого товара и добавляем:
case 'sales_notes':
$strTmpOff .=
"<sales_notes>".yandex_text2xml($sales_notes_value)."</sales_notes>\n";
break;
Данную правку нужно сделать еще в 3 местах, в итоге получаем готовый файл, который можно скачать (windows-1251)
Как видно, ничего сложного в добавлении своих тегов нет!
и кстати за статус товара "под заказ" отвечает атрибут тега offer available (<offer id="12345" type="artist.title" available="true" bid="11">) в <sales_notes> можно прописать: "Элемент используется для отражения информации о минимальной сумме заказа, минимальной партии товара или необходимости предоплаты, а так же для описания акций, скидок и распродаж. Допустимая длина текста в элементе — 50 символов. "
Видимо, переменная поменялась. Теперь вместо strTmpOff используется strValue.
Ищем в yandex_run.php самое последнее упоминание "<description>" и после этого блока: case 'description': $strValue = "<description>". yandex_text2xml(TruncateText( ($arItem["PREVIEW_TEXT_TYPE"]=="html"? strip_tags(preg_replace_callback("'&[^;]*;'", "yandex_replace_special", $arItem["~PREVIEW_TEXT"])) : preg_replace_callback("'&[^;]*;'", "yandex_replace_special", $arItem["~PREVIEW_TEXT"])), 255), true). "</description>\n"; break;
Добавляем
case 'sales_notes': $strValue .= "<sales_notes>".yandex_text2xml($sales_notes_value)."</sales_notes>\n"; break;
--------------- P.S. переменная strTmpOff тоже сохранилась, но, в каких случаях она используется непонятно. Пробовал добавлять в нее данные, но в вывод XML они не попадают.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».