Как сделать активными только импортируемые товары — различия между версиями
Материал из Umicms
Mad grant (обсуждение | вклад) |
Alexei (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | + | [[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]] | |
− | '''Актуально для версии 2. | + | '''Актуально для версии 2.11''' |
'''Задача''': Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.<br/><br/> | '''Задача''': Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.<br/><br/> | ||
'''Реализация''': В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием: | '''Реализация''': В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием: | ||
+ | |||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | + | new umiEventListener("exchangeOnAddElement", "exchange", "onExchangeDisactivateElements"); | |
− | + | new umiEventListener("exchangeOnUpdateElement", "exchange", "onExchangeDisactivateElements"); | |
?> | ?> | ||
− | |||
</source> | </source> | ||
В этой же директории в файл __custom.php нужно добавить следующий код: | В этой же директории в файл __custom.php нужно добавить следующий код: | ||
+ | |||
<source lang="php"> | <source lang="php"> | ||
− | + | static $flag = false; | |
− | + | ||
− | + | public function onExchangeDisactivateElements(iUmiEventPoint $e) { | |
− | + | if ($e->getMode() === 'after') { | |
− | + | return; | |
− | + | } | |
− | + | ||
− | + | $element = $e->getRef('element'); | |
− | + | ||
− | + | if ($element->getMethod() == 'category') { | |
− | + | return; | |
− | + | } | |
− | + | ||
− | + | $importId = getRequest('param0'); | |
− | + | ||
+ | if ($importId) { | ||
+ | $offset = getSession("import_offset_{$importId}"); | ||
+ | } else { | ||
+ | $offset = getSession("1c_import_offset"); | ||
+ | } | ||
+ | |||
+ | // начало импорта, деактивируем все товары | ||
+ | if (!self::$flag && !$offset) { | ||
+ | $pages = new selector('pages'); | ||
+ | $pages->types('hierarchy-type')->name('catalog', 'object'); | ||
+ | |||
+ | foreach ($pages as $p) { | ||
+ | $p->setIsActive(false); | ||
+ | } | ||
+ | |||
+ | self::$flag = true; | ||
+ | } | ||
+ | $element->setIsActive(true); | ||
+ | } | ||
</source> | </source> | ||
Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными. | Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными. |
Версия 08:51, 30 декабря 2015
Актуально для версии 2.11
Задача: Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.
Реализация: В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием:
<?php
new umiEventListener("exchangeOnAddElement", "exchange", "onExchangeDisactivateElements");
new umiEventListener("exchangeOnUpdateElement", "exchange", "onExchangeDisactivateElements");
?>
В этой же директории в файл __custom.php нужно добавить следующий код:
static $flag = false;
public function onExchangeDisactivateElements(iUmiEventPoint $e) {
if ($e->getMode() === 'after') {
return;
}
$element = $e->getRef('element');
if ($element->getMethod() == 'category') {
return;
}
$importId = getRequest('param0');
if ($importId) {
$offset = getSession("import_offset_{$importId}");
} else {
$offset = getSession("1c_import_offset");
}
// начало импорта, деактивируем все товары
if (!self::$flag && !$offset) {
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
foreach ($pages as $p) {
$p->setIsActive(false);
}
self::$flag = true;
}
$element->setIsActive(true);
}
Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными.