Как сделать активными только импортируемые товары — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]
+
[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]
'''Актуально для версии 2.9'''
+
'''Актуально для версии 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", "disActive");
+
new umiEventListener("exchangeOnAddElement", "exchange", "onExchangeDisactivateElements");
    new umiEventListener("exchangeOnUpdateElement", "exchange", "disActive");
+
new umiEventListener("exchangeOnUpdateElement", "exchange", "onExchangeDisactivateElements");
 
?>
 
?>
 
 
</source>
 
</source>
  
 
В этой же директории в файл __custom.php нужно добавить следующий код:
 
В этой же директории в файл __custom.php нужно добавить следующий код:
 +
 
<source lang="php">
 
<source lang="php">
      static $flag = false;
+
static $flag = false;
            public function disActive(iUmiEventPoint $e){
+
 
                if($e->getMode()==='before'){  
+
public function onExchangeDisactivateElements(iUmiEventPoint $e) {
                    $element = $e->getRef('element');
+
if ($e->getMode() === 'after') {
                    $element->SetIsActive(true);
+
return;
                    if((self::$flag===false)){
+
}
                        $pages = new selector('pages');
+
 
                        $pages->types('hierarchy-type')->name('catalog', 'object');
+
$element = $e->getRef('element');
                        foreach ($pages as $p){
+
 
                            $p->setIsActive(false);
+
if ($element->getMethod() == 'category') {
                        }
+
return;
                        self::$flag = true;
+
}
                    }
+
 
                }     
+
$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);
}

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