Migrate імпорт з excel drupal, drupal 7

Знову повертаємося до migrate. Досить зручний фреймворк для імпорту даних в Друпал.
Один з поширених форматів джерела для імпорту - CSV. Підтримується migrate з коробки. Опис і приклади роботи з класом MigrateSourceCSV можна знайти на d.org.
Є один великий недолік при імпорті з CSV - підготовка файлу для імпорту:

  • при збереженні в CSV з Excell Ви не отримаєте необхідну нам кодування utf-8;
  • якщо в поле довгий текст (наприклад, опис), то неодходимо перед збереженням замінити які символи перекладу рядка, інакше можна отримати замість 5000 рядків з товарами - 65000. Перевірено на особистому досвіді. ;

В принципі, в мережі є досить багато програм, для коректної конвертації з xls в csv c додатковими опціями. Все можна вирішити :-) Залишилося тільки навчити "людини" готувати файли для імпорту.

Отже, давайте спробуємо робити імпорт прямо з xls.

Незнаю, може я просто розучився користуватися пошуком, але нічого путнього знайти не зміг. День ходив, обдумував можливі рішення. Вирішив, що варто написати свій плагін для migrate, так би мовити, навчити його зчитувати дані з xls. Почав вивчати source-плагіни "з коробки". І, о диво - class MigrateSourceSpreadsheet. В принципі, на цьому моменті можна закінчити статтю.

Даний клас працює з бібліотекою PHPExcel.

Модуль phpexcel надає API для роботи з xls файлами в своїх модулях. До речі, в реалізації класу MigrateSourceSpreadsheet я не побачив використання цих методів, але ось перевірку на наявність даного модуля знайшов. Можливо, це пов'язано з настройками кешування. Справа в тому, що у бібліотеки PHPExcel є один відомий недолік - велике споживання пам'яті під час обробки файлів. Для вирішення цієї проблеми були розроблені різні механізми кешування. Модуль phpexcel надає можливість з адмінки сайту ( 'admin / config / system / phpexcel') міняти режим кешування.

Migrate імпорт з excel drupal, drupal 7

Найпростіший приклад використання класу MigrateSourceSpreadsheet:

У Вашому файлі для імпорту перейменуйте лист в якийсь зручний назву, наприклад "import", в першому рядку листа задайте імена колонкам англійською мовою. Migrate вважає ці імена і создат на їх основі список полів, доступних для імпорту.

Друг, поясни як це працює. Нічого не зміг зрозуміти куди тут що?
Модулі все поставив.
Пробував тупо через Талас код увіткнути (так можна?), Не вийшло. Ну, зі своїми настройками. Не знаю як там маппинг у мене справа в тому що ще картка товару а в ній віджет товару (ісп. Комерц). Як вони взагалі, але все одно не вийшло ні чого.
Можеш розжувати?

Вітаю! Дякуємо за увагу.
Налаштував імпорт. Всі поля імпортуються крім термінів таксономії (одноуровневого).
пробую налаштувати маппінг таким чином:
$ This-> addFieldMapping ( 'taxonomy_p_group', 'p_group');
$ This-> addFieldMapping ( 'taxonomy_p_group: source_type') -> defaultValue ( 'tid');
$ This-> addFieldMapping ( 'taxonomy_p_group: create_term') -> defaultValue (TRUE);

Якщо термін існує, він створює матеріал, але назва терміна кидає в опис.
Якщо терміна не існує, видає помилку і матеріал не створює.

Не підкажете в чому проблема?

Швидше за все в параметрі source_type. Він вказує, що Ви подаєте на вході. Можна передавати tid (номер терміна) або name (ім'я терміна).
Якщо Ви встановили
$ This-> addFieldMapping ( 'taxonomy_p_group: source_type') -> defaultValue ( 'tid');
то в джерелі у Вас повинні бути номери термінів.
Якщо передаєте назву, то повинно бути зазначено:
$ This-> addFieldMapping ( 'taxonomy_p_group: source_type') -> defaultValue ( 'name');
Уточніть, яке значення для терміну в джерелі

Migrate імпорт з excel drupal, drupal 7

останні статті

Migrate імпорт з excel drupal, drupal 7

Схожі статті