Импорт документов

Простой импорт

Переключаемся на вторую вкладку «ИМПОРТ/ОБНОВЛЕНИЕ» Для начала импорта необходимо подготовить файл-таблицу Excel от MS Office, либо таблицу Calc в Libre Office, либо файл csv в кодировке UTF-8 или Windows 1251. Пример простой таблицы ниже

Столбец А и В это основные поля документа, а столбец С, соответственно ТВ-параметр. Очередность расположения столбцов может быть любая.

Далее кликаем на заштрихованную область мышкой, либо перетаскиваем наш файл на данную область в модуле.

В случае успеха, у нас отобразится таблица и функционал для начала импорта. Работоспособность модуля не гарантируется в случае сложных таблиц с пустыми столбцами, строками, сложными таблицами с объединёнными ячейками и тд.

  • ID родителя. Вы можете указать одного родителя для импорта всех документов в таблице

  • Шаблон. Вы можете указать один шаблон для всех импортируемых документов.

  • Поле по которому сверяемся. В случае импорта только с учетом обновления данных, вы можете указать поле по которому будет происходить проверка.

  • Поле соответствия из XLS-таблицы. В случае если поле в таблице и в базе данных не совпадают по именам, можно указать поле из XLS-таблицы.

  • Поле/TV для замены данных. Дает возможность найти какие то вхождения и заменить их на лету перед импортом в БД сайта.

  • Снять с публикации перед импортом документы с шаблонами. Опция розволяет перед импортом все документы с определенным шаблоном снять с публикации.

  • Не добавлять, если нет совпадений. Вы можете запретить добавление новых документов, в случае, если таких документов нет в базе сайта, а вам нужно просто обновить документы, которые есть эксель-таблице и в базе сайта. Например при обновлении прайса на сайте.

  • Тестовый режим. Импорт без обновления, например посмотреть какие документы совпали по базе, какие нет.

  • Импорт для MultiCategories. Если у вас установлен плагин MultiCategories, который позволяет выводить один документ в разных категориях (ветках, папках), то вы можете прописать в таблице id данных категорий (через запятую), столбец должен называться category. Также важно чтобы у вас на сайте не было ТВ с именем category.

Импорт с разными parent и template

Допустим вы делаете импорт с документами, у которых разные шаблоны и родители. Тогда просто указываете эти данные в таблице. Данные в таблице имеют больший приоритет чем параметры шаблон и id родителя для всех документов. Даже если они будут указаны, все равно будут использоваться данные из таблицы.

Результат работы импорта в тестовом режиме.

Результат работы импорта в боевом режиме.

Сложный импорт с использованием prepare

Для чего нужно использовать prepare-сниппет? Допустим у вас есть прайс где цены указаны в долларах, а вам нужно чтобы на сайте цены записались в рублях. То есть при импорте перед обновлением prepare-сниппет изменяет данные. В настройках импорта по умолчанию у нас указан prepare-сниппет editDocsPrepare. Нам необходимо его создать вручную. Автоматически при установке модуля создается образец сниппета editDocsPrepareExample, который можно использовать как заготовку. Итак, создаем новый сниппет и копируем туда данные из примера.

<?php
//Не используйте данный сниппет как боевой, скопируйте как новый и пропишите его в настройках, иначе при обновление данный сниппет перезапишется на дефолтный example! 

$process = isset($process) ? $process : '';
$mode = isset($mode) ? $mode : '';
switch ($process) {
    case 'import':
        //обработчик импорта
        switch ($mode) {
            case 'upd':
                //обновляем ресурс
                //$data['pagetitle'] = 'import upd ' .  $data['pagetitle'];
                break;
            case 'new':
                //добавляем новый ресурс
                //$data['pagetitle'] = 'import new ' .  $data['pagetitle'];
                break;
            default:
                break;
        }
        break;
    case 'export':
        //обработчик экспорта
        //$data['pagetitle'] = 'export ' .  $data['pagetitle'];
        break;
    default:
        break;
}
return $data;

Давайте в тестовом режиме сделаем конвертацию на примере простой таблицы. И если данные в тестовом режиме нас устроят можно переключить конвертацию в боевой режим.

<?php
//Не используйте данный сниппет как боевой, скопируйте как новый и пропишите его в настройках, иначе при обновление данный сниппет перезапишется на дефолтный example! 

$kurs = 75;	//курс доллара

$process = isset($process) ? $process : '';
$mode = isset($mode) ? $mode : '';
switch ($process) {
    case 'import':
        //обработчик импорта
		
		
		
        switch ($mode) {
            case 'upd':
                //обновляем ресурс
                //$data['pagetitle'] = 'import upd ' .  $data['pagetitle'];
				
				
				$data['price'] = round($data['price'] * $kurs); //меняем цену на рубли
				
				
                break;
            case 'new':
                //добавляем новый ресурс
                //$data['pagetitle'] = 'import new ' .  $data['pagetitle'];
                break;
            default:
                break;
        }
        break;
    case 'export':
        //обработчик экспорта
        //$data['pagetitle'] = 'export ' .  $data['pagetitle'];
        break;
    default:
        break;
}
return $data;

Строка 6 - задаем курс доллара. Строка 22 - меняем данные. Все. В данном примере мы цена будет меняться только при апдейте данных, но не при добавлении новых документов. Из кода видно что нужно сделать чтобы данные обрабатывались и при добавлении новых документов.

Таким образом мы можем при помощи prepare-сниппета создавать на лету категории для товаров, если их не существует.

Импорт по количеству товаров не ограничен, но надо понимать, что вывод таблицы в браузере в 20 000 строк, например, притормозит работу браузера.

Обработка 5 000 документов занимает примерно минуту.

Сложный импорт с использованием prepare для сравнения полей

Бывают такие ситуации, например, когда вам отдают выгрузку с базой кодов из 1С, а там коды в верхнем регистре, а коды в базе сайта в нижнем регистре. Или в выгрузке есть пробелы в данных по которым хотим делать сравнение. На сайте код ААББ, а в табличке аАБб, например. Либо из-за формата ячеек в числах может точка стоять. Да что угодно. В сниппет у нас передается массив $data с ключами db_srav и xls_srav. Первый это данные из базы сайта, второй это из загружаемой таблички. Для манипулирования данными открываем наш prepare сниппет и добавляем туда код ниже:

if ($process == 'srav') {
	
$data['db_srav'] = mb_strtolower($data['db_srav']);
$data['xls_srav'] = mb_strtolower($data['xls_srav']);

$data['xls_srav'] = str_replace('_','',$data['xls_srav']);	
	
}

Не забываем проверку переменной $process и далее из кода видно что мы переводим значения в нижний регистр и в параметре из таблицы убираем нижнее подчеркивание.

Импорт данных для MultiTV

Рассмотрим импорт на следующем примере:

Для этого нам необходим эксель-файл в следующем виде:

где первый столбец у нас будет называться mtv:param1:0, второй mtv:param2:0 и тд., где mtv - имя ТВ параметра (MultiTV), param1 - заголовок (caption) параметра из конфига (НЕ имя, см. скрин ниже), а 0 - номер строки.

Last updated