Модуль MIGRATE и другие средства импорта содержания в Drupal Григорий НАУМОВЕЦ Киев Украина
2 План В чём задача и в чём проблема Средства для импорта содержания в Drupal из популярных CMS Универсальные средства: Migrate, Node import и другие –Хранение содержания в Drupal: обзор таблиц –Node import и типичные проблемы переноса данных –Migrate и вспомогательные модули –Новые возможности Перспективы Целевая аудитория: содержание должно быть понятно и начинающим
3 Создание сайта на основе существующего Сколько статей/нод нужно перенести? Если мало – может, быстрее всего будет скопировать их вручную? Импорт содержания: задача-минимум – перенести основное содержание (заголовки и тела статей/нод) Задача-максимум – полный перенос сайта, включая –Классификационные категории (таксономия) –Файлы, их URLы и связь со статьями/нодами –URLы статей/нод –Языки статей/нод, связь между разноязычными версиями –Пользователи, их пароли, профили, права доступа –Авторство статей/нод –Даты создания/модификации статей/нод –Показатели оценки статей/нод пользователями или менеджерами сайта –И наверняка что-нибудь ещё, что вы заранее не смогли предугадать
4 Переезд на Drupal с других CMS: готовые решения Home » Installation guide » Migrating to Drupal Предлагаются либо специальные модули для переезда с конкретной CMS на Drupal, либо наборы скриптов и инструкций по переносу баз данных и файлов Проверяйте, для каких версий исходной CMS и Друпала разработаны модули или скрипты: если с тех пор структуре баз данных, старые скрипты могут не сработать
5 Примеры модулей для переезда на Drupal с других CMS Joomla to Drupal Wordpress Import WP2Drupal PHP-Nuke to Drupal phpBB2Drupal vBulletin to Drupal И т.д. и т.п.
6 Сравнение различных модулей для импорта и экспорта Comparison of Content and User Import and Export Modules
7 Модуль Node import Импорт содержания из текстовых файлов в формате CSV (comma-separated values) или TSV (tab-separated values) CSV или ТSV можно экспортировать из Microsoft Excel, или из phpmyadmin Текст в файле должен быть в кодировке UTF-8
8 Модуль Node import Можно импортировать данные в поля нод стандартных типов (page, story, etc.) и нестандартных (CCK) В ходе импорта анализируется структура исходной CSV- таблицы и задаётся соответствие: какую колонку таблицы импортировать в какое поле ноды Исходные данные Field 1 Field 2 Field 3 Field 4 Field 5 Field 6 Node Title Body Timestamp CCK Field 1 CCK Field 2 Language
9 Node import: возможные проблемы Перенос классификационных категорий в таксономию: возможна разная структура записи articlenumbercategories 168,40,41, , ,93 В исходном материале категории для каждой статьи перечислены через запятую, в Друпале о каждой таксономической категории (tid) делается отдельная запись с указанием идентификаторов ноды (nid, vid) Для простоты показан случай, когда номера нод и таксономических терминов равны номерам статей и классифкационных категорий в исходном материале – но реально это может быть не так
10 Возможное решение таких проблем Создаётся временное («техническое») поле, куда импортируются данные, которые нужно будет преобразовать (например, список категорий через запятую) Потом пишется sql-скрипт (или php-код), который выполняет нужное преобразование: в данном случае, просматривает содержимое временного поля и для каждой найденной категории создаёт соответствующую запись в таблице term_node Заодно, при необходимости, коды категорий исходного материала меняются на идентификаторы таксономических категорий Друпала Когда импорт содержания закончен и всё проверено, временные поля можно удалить
11 Node import: ещё один пример возможных проблем Перенос многоязычного сайта: возможна разная схема записи данных о языке и стыковки разноязычных статей/нод articlenumberlanguage Пример: в исходном материале язык описывается цифровым кодом (1,2,…), разноязычные версии стыкуются по номеру статьи (articlenumber) nidlanguagetnid 1en1 2ru1 3en3 4ru3 В Друпале язык описывается буквенным кодом (en,ru,…), разноязычные версии стыкуются по tnid (номеру ноды-«оригинала»), при этом номера нод не равны номерам статей (nidarticlenumber)
12 Возможное решение Исходный номер статьи (articlenumber) импортируется во временное поле Пишется sql-скрипт (или php-код), который должен: –Преобразовать коды языков для поля language (1->en, 2->ru и т.д.) –Сформировать значения поля tnid таким образом, чтобы, допустим, для нод с language=en tnid=nid а для нод с language=ru tnid = номеру англоязычной ноды с таким же значением articlenumber. В конце временные поля удалить
13 А как вообще в Друпале хранится содержание? В каких таблицах базы данных хранится основное содержание ноды и прочие данные, которые с ней связаны?
14 Table: node id ноды id версии ноды тип ( page, story, etc.) язык заголовок id пользователя Связь разноязычных версий: id ноды-«оригинала» статус перевода Вопреки ожиданиям, в таблице node НЕТ ОСНОВНОГО СОДЕРЖАНИЯ НОДЫ (body) Оно хранится в таблице node_revisions
15 Table: node_revisions id ноды id версии ноды id пользователя тело анонс Формат интерпретации содержания: filtered html,full html, php, etc. Именно в этой таблице хранится основное содержание («тело») ноды заголовок
16 Дополнительные таблицы для нестандартных типов CCK и используемых в них полей Таблица, где хранятся значения дополнительных полей CCK для нод определённого типа (intlproj) привязка к ноде по id версии и ноды значения дополнительных полей Таблица, где хранятся значения дополнительного поля CCK (areafocus), используемого в нодах нескольких типов значение дополнительного поля привязка к ноде по id версии и ноды
17 Таблицы, в которых описана таксономия
18 Данные о файлах и их связи с нодами: таблицы upload и files id ноды id версии ноды id файла id пользователя
19 Данные об адресах (алиасах) нод: таблица url_alias Source – системный адрес node/1 Destination – адрес-псевдоним welcome id адреса язык, к которому привязан адрес
20 Связь таблиц, где хранится информация о ноде node Основные данные о ноде node_revisions Основное содержание ноды, версии content_type_cck1 Значения полей, включённых в CCK тип CCK1 content_field_field1 Значения дополнительного поля field1 url_alias URL ноды upload Ссылки на приложенные файлы files Подробнее о приложенных файлах users Данные о пользователе - авторе ноды term_node Таксономия ноды term_node term_data term_hierarchy vocabulary Подробнее о таксономии
21 Проблема импорта из множества связанных таблиц В Друпале содержание разбросано по множеству связанных таблиц Что, если в исходной CMS содержание тоже разбросано по разным таблицам? Прежде чем создавать CSV-файл и подсовывать его под node_import, придётся соединить нужные данные из разных таблиц в одной Т.е. нужна предварительная обработка исходного материала
22 Импорт содержания CMS – источник данных Drupal Выделить содержание определённого типа Манипуляция данными (например, объединение таблиц, перекодировка, замена значений) Экспорт таблицы данных Манипуляция данными Создать/определить тип CCK и соответствующие поля для импорта содержания Проанализировать импортируемую таблицу, задать соответствие полей Импорт таблицы данных Манипуляция данными Доработка напильником и др. инструментами PROFIT!
23 Модули для преобразования данных Import / Export API Transformations –This module transforms data. It doesn't care which data, and it doesn't care how. This module is complex, and strongly object-oriented. If you're afraid of classes and objects in PHP, run away now. –This module can do lots in principle, but little out of the box.
24 Модуль Migrate: зависимость от других модулей Table Wizard Schema Views Migrate Extras. (для импорта полей CCK и взаимодействия с некоторыми другими модулями) Advanced help - рекомендуется
25 Модули Table Wizard (TW) и Schema Модуль Schema: API для операций с таблицами в базе данных Table Wizard позволяет: –Просматривать, фильтровать и т.п. таблицы в базе данных средствами Views –Анализировать данные – показывать диапазон значений и т.п. –Устанавливать связи между таблицами и совмещать их данные –Импортировать данные из CSV-таблиц TW предоставляет API для работы других модулей с таблицами базы данных через Views
26 Последовательность действий при импорте через Migrate and-table-wizard site_drupal
27 Последовательность действий при импорте через Migrate Втянуть таблицу с данными в MySQL У таблицы д.б. единственный основной ключ (primary key); при необходимости - отредактировать Использовать Table Wizard (admin/content/tw) и пометить нужные таблицы Если данные хранятся в нескольких таблицах – построить связи (admin/content/tw/relationships) Проанализировать данные и построить таблицы соответствий (content sets) между исходными полями и полями, куда нужно импортировать данные (admin/content/migrate/destinations) Выбрать таблицу соответствий и запустить процесс миграции (admin/content/migrate/process)
28 Шаги импорта данных через Migrate Выбор таблицы в Table Wizard: таблица legacy_products Pictures from manual by Angie Byron data-imports-migrate-and-table-wizard
29 Шаги импорта данных через Migrate Таблица legacy_products выбрана показана информация о её содержании: количество записей - 4 Pictures from manual by Angie Byron
30 Шаги импорта данных через Migrate Анализ таблицы legacy_products поля можно комментировать, помечать как игнорируемые Pictures from manual by Angie Byron
31 Шаги импорта данных через Migrate Просмотр содержания таблицы legacy_products (без игнорируемых полей) Pictures from manual by Angie Byron
32 Шаги импорта данных через Migrate Разметка импорта полей из таблицы в ноду Pictures from manual by Angie Byron
33 Шаги импорта данных через Migrate Source fieldDefault valueDestination field 1Node: Authored by (uid) name Node: Title description Node: Body description Node: Teaser price CCK: Price value sku CCK: SKU Number value При этом задаются такие назначения для импорта:
34 Шаги импорта данных через Migrate Задание команды на импорт Pictures from manual by Angie Byron
35 Шаги импорта данных через Migrate Сообщение о результатах импорта: импортировано 4 записи Pictures from manual by Angie Byron
36 Шаги импорта данных через Migrate В списке нод появилось 4 новых ноды они пока не опубликованы – чтобы можно было проверить, всё ли с ними в порядке Pictures from manual by Angie Byron
37 Новое и полезное в Migrate (+TW): Работа с таблицами в базе данных Возможность объединения данных из нескольких таблиц Более удобный и наглядный интерфейс для анализа, фильтрации, просмотра, установки соответствий Возможность автоматического разбора значений, перечисленных через запятую Hooks для разработчиков дополнительных модулей: см. Migrate: Hooks Migrate API - new in migrate-1.0-beta4 and beyond.
38 Развитие Migrate Для Drupal 6 сделан Migrate 1.0 Migrate 2.0 разрабатывается для D7 – после чего планируется backport на D6. Migrate 2.0 не должно зависеть от модулей Views и Table Wizard
39 Спасибо за внимание! Контактная информация: –