Автоматическая подготовка экспорта в формат YML с помощью cron — различия между версиями
Alexei (обсуждение | вклад) |
Alexei (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | '''Актуально для версии 2. | + | '''Актуально для версии 2.11''' |
Если на вашем сайте большое количество товаров и, соответственно, подготовка экспорта в формат YML занимает продолжительное время, то возникает необходимость запускать данную подготовку, например, ночью, чтобы днем была меньше нагрузка на сайт. Для выполнения данной задачи необходимо сделать следующее: | Если на вашем сайте большое количество товаров и, соответственно, подготовка экспорта в формат YML занимает продолжительное время, то возникает необходимость запускать данную подготовку, например, ночью, чтобы днем была меньше нагрузка на сайт. Для выполнения данной задачи необходимо сделать следующее: | ||
− | 1) В папке classes/modules/exchange разместите файл | + | 1) В папке classes/modules/exchange разместите файл custom_events.php , и в нем пропишите следующий код: |
+ | |||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | + | new umiEventListener("cron", "exchange", "prepareElementsToExportCustom"); | |
?> | ?> | ||
</source> | </source> | ||
Строка 13: | Строка 14: | ||
<source lang="php"> | <source lang="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($ | + | 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; | |
− | + | } | |
+ | } | ||
+ | } | ||
} | } | ||
− | |||
</source> | </source> | ||
− | Все, теперь осталось только настроить автоматический запуск cron на какое-то время, это | + | Все, теперь осталось только настроить автоматический запуск cron на какое-то время, это вы самостоятельно устанавливаете на хостинге, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ . |
− | + | Обратите внимание: в скрипте загружаются все товары сразу, поэтому на обработку большого каталога может уйти много оперативной памяти и времени. | |
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Модуль Обмен данными]][[Категория:Написание кастомных макросов]] | [[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Модуль Обмен данными]][[Категория:Написание кастомных макросов]] |
Версия 12:39, 1 февраля 2016
Актуально для версии 2.11
Если на вашем сайте большое количество товаров и, соответственно, подготовка экспорта в формат YML занимает продолжительное время, то возникает необходимость запускать данную подготовку, например, ночью, чтобы днем была меньше нагрузка на сайт. Для выполнения данной задачи необходимо сделать следующее:
1) В папке classes/modules/exchange разместите файл custom_events.php , и в нем пропишите следующий код:
<?php
new umiEventListener("cron", "exchange", "prepareElementsToExportCustom");
?>
2) В файле classes/modules/exchange/__custom.php после строки //TODO: Write your macroses here добавьте следующий код:
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;
}
}
}
}
Все, теперь осталось только настроить автоматический запуск cron на какое-то время, это вы самостоятельно устанавливаете на хостинге, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ .
Обратите внимание: в скрипте загружаются все товары сразу, поэтому на обработку большого каталога может уйти много оперативной памяти и времени.