Удаление товаров из системы при импорте

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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;
	}
}

После этого товары, которые были помечены, как удаленные, будут удалены из системы, минуя корзину.