Удаление товаров из системы при импорте
Материал из Umicms
Версия от 10:06, 8 апреля 2014; Mad grant (обсуждение | вклад)
Актуально для версии 2.9.6
Задача
Как известно из статьи [[Удаление_элементов_или_снятие_активности_при_импорте_данных_из_1С], если в 1С товар был помечен на удаление, то UMI.CMS при импорте такого товара поместит его в корзину. Если Вам необходимо, чтобы товар не помещался в корзину, а сразу удалялся из системы, то необходимо написать обработчик события exchangeOnUpdateElement, пример оного дан ниже.
Решение
Создаем в директории /classes/modules/catalog/ файл custom_events.php следующего содержания:
<?php
new umiEventListener("exchangeOnUpdateElement", "catalog", "onCatalogObjectImportDelete");
?>
и добавляем в файл /classes/modules/catalog/__custom_adm.php следующий метод:
public function onCatalogObjectImportDelete(iUmiEventPoint $eventPoint){
if ($eventPoint->getMode() == 'after') {
$element = $eventPoint->getRef('element');
if ($element->getHierarchyType()->getMethod() !== 'object' || $element->getHierarchyType()->getModule() !== 'catalog') {
return;
}
$info = $eventPoint->getParam('element_info');
if($info->hasAttribute('is-deleted') == true && $info->getAttribute('is-deleted') == true){
umiHierarchy::getInstance()->removeDeletedElement($element->getId());
}
}else{
return;
}
}
После этого товары, которые были помечены, как удаленные, будут удалены из системы, минуя корзину.