Это старая версия Справка/Разработчик/Расширения/AdvOntologyCSV за 2014-04-09 17:39:30..

AdvOntologyCSV

Расширение AdvOntologyCSV позволяет экспортировать и импортировать данные из csv-файлов в таблицы AdvOntology, а также синхронизировать их между собой.
При передаче данных в любую сторону могут быть определены процедуры преобразования.
Ведется журнал выполненных операций.

Стратегии обмена данными

Расширение поддерживает четыре стратегии обмена данными:
  • importOne – используется, если в таблицу AdvOntology загружаются данные из одного csv-файла. При повторном импорте таблица AdvOntology переинсталлируется, id обнуляется.
  • importSum – используется, если в таблицу AdvOntology импортируются данные из многих csv-файлов (импорт можно отменить). При повторном импорте данные добавляются в таблицу за новыми id. Все csv-файлы, предназначенные для импорта в одну таблицу AdvOntology, хранятся в одноименной папке в директории _importSum.
  • export TODO – используется для выгрузки данных из таблиц AdvOntology
  • sync TODO – используется для полной синхронизации таблицы AdvOntology с единственным csv-файлом. Необходимо указать поле csv-файла, которое будет выполнять функцию ключа.

Пример

Инсталляция

Шаг 1

После инсталляции в директории sites/[mysite.ru]/data/AdvOntologyCSV автоматически создаются папки:
  • _export хранилище csv-файлов, экспортированных из таблиц AdvOntology
  • _importOne хранилище csv-файлов, предназначенных для импорта с перезаписью
  • _importSum хранилище csv-файлов, предназначенные для импорта с добавлением
    • myType1
    • myType2
  • _sync хранилище csv-файлов, синхронизированных с таблицами AdvOntology
  • phpProcessor папка с php-процедурами преобразования данных
  • config.php параметры обмена данными

Шаг 2

Опишите параметры обмена данными в файле config.php.
Опишите пользовательские процедуры преобразования данных и сохраните их в папке phpProcessor.

Шаг 3

Разместите на странице /Администрирование/Сервисы/AdvOntologyCSV экшены:
  • adminuploadcsv для загрузки csv-файлов
  • adminfilescsv для администрирования и импорта загруженных csv-файлов
{{adminuploadcsv oper="importOne"}}
{{adminfilescsv  oper="importOne"}}

{{adminuploadcsv oper="importSum" type="DemoPerson"}}
{{adminfilescsv  oper="importSum" type="DemoPerson"}}

Шаг 4

С помощью экшенов adminuploadcsv и adminfilescsv загружайте и импортируйте csv-файлы.
Журнал выполненных операций располагается на странице /Администрирование/Сервисы/AdvOntologyCSV/Log.

config.php

Структура конфигуратора и синтаксис стандартных процедур преобразования данных видны из примера:
<?php
    $this
->config = array (
        
"importOne" => array (
            array(
"file1.csv""Type1", array("header" => 0), array( // header - сколько строк пропустить 
                
"field1" => 0// is_int: значение из столбца 0
                
"field2" => "value"// is_string: текстовая константа
                
"field3" => "phpProcessor"// о процессоре см. ниже
                
"field4" => array("concat""[2], д.[3], кв.[4]"), // склеивание столбцов 2,3 и 4
                
"field5" => array("substr"3$start$length), // подстрока из столбца 3
                
"field6" => array("getId"4"NewType""NewField"
                    
// подстановка id, где значение в столбце 4 = NewType.NewField
            
) )
        ),
        
"importSum" => array (
            array(
"""Type2", array("header" => 0), array( ) )
            
// в importSum имя csv-файла не указывается
         
),
        
"export" => array (
        
        ),
        
"sync" => array (
        
        )
    );
?>

phpProcessor

В папке phpProcessor хранятся пользовательские процедуры преобразования данных. Для каждого поля необходимо создать отдельный php-файл с именем имя_типа.имя_поля.php.
PHP процессор получает на вход $data (нумерованный массив со значениями текущей строки csv-файла) и должен установить переменную $res (значение, которое будет записано в поле таблицы).
Если необходим доступ к сервисам, то он выполняется в контексте AdvOntologyCSV.

Пример файла DemoPerson.data.php Преобразует первое поле csv-файла вида «Иванов Иван Иванович» в «Иванов И.И.»
<?php
    $arr 
explode(" "$data[0]);
    
$res $arr[0]." ".substr($arr[1], 01).".".substr($arr[0], 01);
?>

actions

adminuploadcsv – загрузка CSV-файлов (для администратора)

Выводится форма загрузки csv-файлов в зависимости от предполагаемого использования (импорт/синхронизация).
{{adminuploadcsv oper="importOne|importSum|sync" [type="SciArticle"] }}
Name default Description
operПредполагаемое использование
если ="importOne" или ="sync", при коллизии имен файл будет перезаписан поверх существующего
если ="importSum", при коллизии имен загрузка блокируется, предлагается переименовать файл или удалить существующий.
typeИмя таблицы AdvOntology (только для oper="importSum")

useruploadcsv – загрузка CSV-файлов (для пользователя)

Выводится форма загрузки csv-файлов для зарегистрированных пользователей.
После загрузки файлам автоматически присваивается имя имя_пользователя гггг-мм-дд чч:мм:сс.ext.
Из соображений безопасности три параметра определяются в теле файла:
$oper = 'userfiles'; // имя папки в директории data/AdvOntologyCSV/, куда будут загружаться файлы
$extensions = array('csv'); // допустимые расширения
$maxsize = 2000; // максимальный размер загружаемого файла в Кб

adminfilescsv – список CSV-файлов

Выводится список csv-файлов и панель действий для каждого из них: «импортировать», «отменить», «удалить файл». Действие «импортировать» доступно при выполнении трех условий: 1) параметры импорта определены в файле config.php; 2) создан целевой тип AdvOntology; 3) загружен cav-файл.
{{adminuploadcsv oper="importOne|importSum|sync" [type="SciArticle"]}}
Name default Description
operДиректория с файлами в соответствии с предполагаемым использованием.
typeИмя таблицы AdvOntology (только для oper="importSum").

Журнал

В журнале хранится служебная информация обо всех выполненных операциях обмена данными:
  • тип операции; при отмене операции типу присваивается постфикс Undo, например importOneUndo
  • имя таблицы AdvOntology;
  • имя csv-файла;
  • id записей, добавленных в таблицу в результате импорта; через “:", например “:1:2:3:4:5:"
  • дата и id пользователя, совершившего операцию.