Так вот, о чем я говорил на встрече разработчиков...
итоговый файл выгрузки составляется после подготовки к выгрузке из папки /sys-temp/yml/
суть в том, что система позволяет возможность кастомизации только отдельного предложения, т.е. то что внутри <offer> мы можем менять, и то не все, та же <category> не поддается изменению, а вот то что в секции <categories> менять через /xsl/export/custom/YML.xsl не получится и вовсе!!! Конечно, умники скажут, мол приведи структуру сайта как в яндекс маркете и все будет ок, но не всегда структуру можно подогнать под маркет и не всегда заказчик пойдет на это.
Пришлось создать справочник Категория YM с категориями у которых были указаны так же родители и добавить поле типа "выпадающий список" в тип данных Объекта каталога, и все, все что можно сделать легальным способом, далее так...
/classes/system/subsystems/export/exporters/YMLExporter.php
выводим список своих категорий в <category>
if (file_exists($dirName . 'categories' . $id))
{
file_put_contents($xml, '<categories>', FILE_APPEND);
$categories = new selector('objects');
$categories->types('object-type')->id('141');
foreach($categories as $category)
{
$id = $category->id;
$parent_id = $category->parent;
file_put_contents($xml, iconv('utf-8', 'windows-1251', '<category id="' . $id . '"' . ($parent_id ? ' parentId="' . $parent_id . '"' : '') . '>' . $category->name . '</category>') , FILE_APPEND);
}
file_put_contents($xml, '</categories>', FILE_APPEND);
}
меняем категорию в <offer>
$hierarchy = umiHierarchy::getInstance();
foreach($elementsToExport as $fileId)
{
$filePath = $dirName . $fileId . '.txt';
if (is_file($filePath))
{
$offer = file_get_contents($filePath);
preg_match('|<url>http://(.*)</url>|', $offer, $matches);
$url = explode('/', $matches[1]);
unset($url[0]);
$url = '/' . implode('/', $url);
$id = $hierarchy->getIdByPath($url, true);
$element = $hierarchy->getElement($id, true, true);
$category_ym = $element->category_ym;
$offer = preg_replace("!<categoryId>(.*)</categoryId>!", '<categoryId>' . $category_ym . '</categoryId>', $offer);
file_put_contents($xml, $offer, FILE_APPEND);
}
вот как-то, в прогинге не асс, если есть более простые и элегантные способы решения данной задачи, то хотелось бы увидеть ваши предложения