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

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
  [[category:Модуль Обмен данными]]
+
  [[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]
 
'''Актуально для версии 2.9'''
 
'''Актуально для версии 2.9'''
  

Версия 08:46, 5 июня 2013

Актуально для версии 2.9

Задача: Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.

Реализация: В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием:

<?php
    new umiEventListener("exchangeOnAddElement", "exchange", "disActive");
    new umiEventListener("exchangeOnUpdateElement", "exchange", "disActive");
?>

В этой же директории в файл __custom.php нужно добавить следующий код:

      static $flag = false;
            public function disActive(iUmiEventPoint $e){
                if($e->getMode()==='before'){ 
                    $element = $e->getRef('element');
                    $element->SetIsActive(true);
                    if((self::$flag===false)){
                        $pages = new selector('pages');
                        $pages->types('hierarchy-type')->name('catalog', 'object');
                        foreach ($pages as $p){
                            $p->setIsActive(false);
                        }
                        self::$flag = true;
                    }
                }       
            }

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