Автоматическая подготовка экспорта в формат YML с помощью cron
Актуально для версии 20
Задача
Реализовать автоматическую подготовку экспорта в формат YML c помощью cron.
Решение
Если на вашем сайте большое количество товаров и, соответственно, подготовка экспорта в формат YML занимает продолжительное время, то возникает необходимость запускать данную подготовку, например, ночью, чтобы днем была меньше нагрузка на сайт. Для выполнения данной задачи необходимо сделать следующее:
1) В папке classes/components/exchange разместите файл custom_events.php , и в нем пропишите следующий код:
<?php
new umiEventListener("cron", "exchange", "prepareElementsToExportCustom");
2) В файле classes/components/exchange/customMacros.php добавьте следующий код:
public function prepareElementsToExportCustom() {
$objectId = '885'; // пропишите в эту переменную id выгрузки YML
$objects = umiObjectsCollection::getInstance();
$object = $objects->getObject($objectId);
$formatId = $object->format;
$format = $objects->getObject($formatId);
$suffix = $format->sid;
if ($suffix != 'YML') {
return;
}
if (!file_exists(CURRENT_WORKING_DIR . "/sys-temp/yml/" . $objectId . 'el')) {
throw new publicException('<a href="' . getLabel("label-errors-no-information") . '" target="blank">' . getLabel("label-errors-no-information") .'</a>');
}
$elements = unserialize(file_get_contents(CURRENT_WORKING_DIR . "/sys-temp/yml/" . $objectId . 'el'));
$hierarchy = umiHierarchy::getInstance();
foreach ($elements as $elementId) {
$element = $hierarchy->getElement($elementId);
if ($element instanceof umiHierarchyElement) {
try {
$element->updateYML();
} catch (Exception $e) {
echo $e->getMessage() . " #{$elementId}";
return;
}
}
}
}
В коде необходимо указать идентификатор экспорта данных в YML настроенного в модуле Обмен данными. Его можно посмотреть в адресной строке при редактировании экспорта данных или на вкладке Экспорт данных при наведении:
Все, теперь осталось только настроить автоматический запуск cron на нужное время, это можно сделать в админке хостинга, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ .
Обратите внимание: В скрипте загружаются все товары сразу, поэтому на обработку большого каталога может уйти много оперативной памяти и времени.