Экспорт в YML списка объектов каталога

Материал из Umicms
Версия от 04:31, 29 марта 2011; VITL' (обсуждение | вклад) (Новая страница: «В некоторых случаях, необходим выборочный экспорт объектов каталога в формат ЯндексМарке…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

В некоторых случаях, необходим выборочный экспорт объектов каталога в формат ЯндексМаркет (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-данные в формате ЯндексМаркет.