Как переместить страницу если её раздел поменялся — различия между версиями
Mad grant (обсуждение | вклад) |
Mad grant (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | '''Актуально для версии 2.9. | + | '''Актуально для версии 2.9.6''' |
== Задача == | == Задача == | ||
Строка 58: | Строка 58: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | После этого товары будут менять раздел, если он поменялся в 1С. В обработчике задействован [[Класс_umiImportRelations]]. | ||
[[category:Интеграция с 1С]] | [[category:Интеграция с 1С]] |
Текущая версия на 15:01, 7 апреля 2014
Актуально для версии 2.9.6
Задача
Допустим мы импортировали из 1С товар с одним типом данных и разделом, а потом мы импортируем тот же товар, но у него ид типа, а значит и раздел другой. Если Вы столкнулись с данной задачей, то решить её стандартными средствами нельзя, так как специально была дана возможность иметь независимую иерархию каталогов в UMI.CMS и 1С. Но эту логику можно поменять, необходимо написать обработчик события exchangeOnUpdateElement, пример оного дан ниже.
Решение
Создаем в директории /classes/modules/catalog/ файл custom_events.php следующего содержания:
<?php
new umiEventListener("exchangeOnUpdateElement", "catalog", "onCatalogObjectImportUpdate");
?>
и добавляем в файл /classes/modules/catalog/__custom_adm.php следующий метод:
public function onCatalogObjectImportUpdate(iUmiEventPoint $eventPoint) {
if ($eventPoint->getMode() !== 'before') {
return;
}
$element = $eventPoint->getRef('element');
if ($element->getHierarchyType()->getMethod() !== 'object' || $element->getHierarchyType()->getModule() !== 'catalog') {
return;
}
$elementInfo = $eventPoint->getParam('element_info');
$relations = umiImportRelations::getInstance();
$object = $element->getObject();
$commerceMLTypeId = $elementInfo->getAttribute('type-id');
$umiCurrentTypeId = $object->getTypeId();
$sourceId = $relations->getSourceId('commerceML2');
$umiNewTypeId = $relations->getNewTypeIdRelation($sourceId, $commerceMLTypeId);
if ($umiNewTypeId && $umiCurrentTypeId == $umiNewTypeId) {
$object->setTypeId($umiNewTypeId);
$object->commit();
}
$umiCurrentParentId = $element->getParentId();
$umiNewParentId = $relations->getNewIdRelation($sourceId, $commerceMLTypeId);
if ($umiNewParentId && $umiNewParentId != $umiCurrentParentId) {
$element->setRel($umiNewParentId);
$element->commit();
umiHierarchy::getInstance()->rebuildRelationNodes($umiNewParentId);
}
}
После этого товары будут менять раздел, если он поменялся в 1С. В обработчике задействован Класс_umiImportRelations.