Решение проблемы с импортом полей типа boolean в формате umiDump 2.0

Материал из Umicms
Версия от 12:52, 30 июня 2013; Stexe (обсуждение | вклад) (Новая страница: « category:Модуль Обмен данными '''Описание проблемы:''' В результате экспорта страниц в форма…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск


Описание проблемы: В результате экспорта страниц в формате umiDump 2.0 информация о неотмеченных полях типа кнопка-флажок (boolean) не попадет в итоговый файл. Если при экспорте страницы какое-либо ее поле типа boolean было неотмечено, а на момент импорта этой страницы уже отмечено, то значение данного поля изменено не будет.

Реализация решения данной проблемы: Для решения данной проблемы мы напишем обработчик события для точки вызова exchangeOnUpdateElement, в котором в режиме 'before' для всех полей типа boolean обновляемой страницы будем устанавлявать значение false (неотмечено).
В директорию classes\modules\exchange необходимо добавить файл custom_events.php со следующим содержанием:

<?php
    new umiEventListener('exchangeOnUpdateElement', 'exchange', 'boolValueOff');
?>

В файл \classes\modules\exchange\__custom.php нужно добавить код обработчика события:

public function boolValueOff(umiEventPoint $event){
                    if ($event->getMode()=='before'){
                        $element = $event->getRef('element');
                        $obj = $element->getObject();
                        $type_id = $obj->getTypeId();
                        $type = umiObjectTypesCollection::getInstance()->getType($type_id);
                        $fields = $type->getAllFields();
                        
                        foreach ($fields as $field)
                            if ($field->getFieldType()->getDataType()=='boolean'){
                                $fieldname = $field->getName();
                                $element->setValue($fieldname,false);
                            }
                    }
                }