Экспорт в YML списка объектов каталога
Материал из Umicms
В некоторых случаях, необходим выборочный экспорт объектов каталога в формат ЯндексМаркет (YML), т.е. экспорт не целых разделов, а только указанных объектов каталога. Чтобы осуществить подобный экспорт, необходимо подключить модифицированный сплиттер, потому что оригинальный (YMLExporter.php), производит экспорт относительно выбранных разделов каталога. Используя информацию в данной статье Добавление нового формата экспорта данных, добавим новый тип экспорта в справочник "Форматы экспорта", Идентификатор укажем: YMLCustom. Далее необходимо в папку \classes\system\subsystems\export\exporters\ добавить файл YMLCustomExporter.php следующего содержания:
<?php class YMLCustomExporter extends umiExporter { public function setOutputBuffer() { $buffer = outputBuffer::current('HTTPOutputBuffer'); $buffer->charset("windows-1251"); $buffer->contentType("text/xml"); return $buffer; } public function export($branches) { if (!count($branches)) { $sel = new selector('pages'); $sel->where('hierarchy')->page(0)->childs(1); $branches = $sel->result; } $source_name = $this->getSourceName(); $exporter = new xmlExporter($source_name); $parents = array(); foreach($branches as $item){ $parent = $item->getParentId(); if(!in_array($parent, $parents)) $parents[] = $parent; } $branches = array_merge($branches, $parents); $exporter->addElements($branches); $result = $exporter->execute(); $umiDump = $result->saveXML(); $style_file = './xsl/export/' . $this->type . '.xsl'; if (!is_file($style_file)) { throw new publicException("Can't load exporter {$style_file}"); } $doc = new DOMDocument("1.0", "utf-8"); $doc->formatOutput = XML_FORMAT_OUTPUT; $doc->loadXML($umiDump); $templater = xslTemplater::getInstance(); $templater->setIsInited(false); $templater->init($style_file); $templater->setXmlDocument($doc); $result = $templater->parseResult(); // convert to CP1251 $result = iconv("UTF-8", "CP1251", $result); $doc = new DOMDocument("1.0", "windows-1251"); $result = str_replace('<' . '?xml version="1.0" encoding="utf-8"?>', '<' . '?xml version="1.0" encoding="windows-1251"?>', $result); return $result; } } ?>
Теперь создав в модуле "Обмен данными", новый сценарий экспорта, указав наш новый тип экспорта и список объектов каталога, выполнив экспорт мы получим корректные XML-данные в формате ЯндексМаркет.
