Модуль MIGRATE и другие средства импорта содержания в Drupal

Содержание

Слайд 2

План

В чём задача и в чём проблема
Средства для импорта содержания в Drupal

План В чём задача и в чём проблема Средства для импорта содержания
из популярных CMS
Универсальные средства: Migrate, Node import и другие
Хранение содержания в Drupal: обзор таблиц
Node import и типичные проблемы переноса данных
Migrate и вспомогательные модули
Новые возможности
Перспективы
Целевая аудитория: содержание должно быть понятно и начинающим ☺

Слайд 3

Создание сайта на основе существующего

Сколько статей/нод нужно перенести? Если мало –может, быстрее

Создание сайта на основе существующего Сколько статей/нод нужно перенести? Если мало –может,
всего будет скопировать их вручную?
Импорт содержания: задача-минимум – перенести основное содержание (заголовки и тела статей/нод)
Задача-максимум – полный перенос сайта, включая
Классификационные категории (таксономия)
Файлы, их URLы и связь со статьями/нодами
URLы статей/нод
Языки статей/нод, связь между разноязычными версиями
Пользователи, их пароли, профили, права доступа
Авторство статей/нод
Даты создания/модификации статей/нод
Показатели оценки статей/нод пользователями или менеджерами сайта
И наверняка что-нибудь ещё, что вы заранее не смогли предугадать

Слайд 4

“Переезд” на Drupal с других CMS: готовые решения

Home » Installation guide »

“Переезд” на Drupal с других CMS: готовые решения Home » Installation guide
Migrating to Drupal http://drupal.org/handbook/migrating
Предлагаются либо специальные модули для переезда с конкретной CMS на Drupal, либо наборы скриптов и инструкций по переносу баз данных и файлов
Проверяйте, для каких версий исходной CMS и Друпала разработаны модули или скрипты: если с тех пор структуре баз данных, старые скрипты могут не сработать

Слайд 5

Примеры модулей для “переезда” на Drupal с других CMS

Joomla to Drupal http://drupal.org/project/joomla
Wordpress Import http://drupal.org/project/wordpress_import

Примеры модулей для “переезда” на Drupal с других CMS Joomla to Drupal
WP2Drupal http://drupal.org/project/wp2drupal
PHP-Nuke to Drupal http://drupal.org/project/phpnuke2drupal
phpBB2Drupal http://drupal.org/project/phpbb2drupal
vBulletin to Drupal http://drupal.org/project/vbtodrupal
И т.д. и т.п.

Слайд 6

Сравнение различных модулей для импорта и экспорта

http://groups.drupal.org/node/21338 Comparison of Content and User Import

Сравнение различных модулей для импорта и экспорта http://groups.drupal.org/node/21338 Comparison of Content and
and Export Modules

Слайд 7

Модуль Node import

http://drupal.org/project/node_import
Импорт содержания из текстовых файлов в формате CSV (comma-separated values) или

Модуль Node import http://drupal.org/project/node_import Импорт содержания из текстовых файлов в формате CSV
TSV (tab-separated values)
CSV или ТSV можно экспортировать из Microsoft Excel, или из phpmyadmin
Текст в файле должен быть в кодировке UTF-8

Слайд 8

Модуль Node import

Можно импортировать данные в поля нод стандартных типов (page, story,

Модуль Node import Можно импортировать данные в поля нод стандартных типов (page,
etc.) и нестандартных (CCK)
В ходе импорта анализируется структура исходной CSV-таблицы и задаётся соответствие: какую колонку таблицы импортировать в какое поле ноды

Слайд 9

Node import: возможные проблемы

Перенос классификационных категорий в таксономию: возможна разная структура записи

В

Node import: возможные проблемы Перенос классификационных категорий в таксономию: возможна разная структура
исходном материале категории для каждой статьи перечислены через запятую, в Друпале о каждой таксономической категории (tid) делается отдельная запись с указанием идентификаторов ноды (nid, vid)

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

Слайд 10

Возможное решение таких проблем

Создаётся временное («техническое») поле, куда импортируются данные, которые нужно

Возможное решение таких проблем Создаётся временное («техническое») поле, куда импортируются данные, которые
будет преобразовать (например, список категорий через запятую)
Потом пишется sql-скрипт (или php-код), который выполняет нужное преобразование: в данном случае, просматривает содержимое временного поля и для каждой найденной категории создаёт соответствующую запись в таблице term_node
Заодно, при необходимости, коды категорий исходного материала меняются на идентификаторы таксономических категорий Друпала
Когда импорт содержания закончен и всё проверено, временные поля можно удалить

Слайд 11

Node import: ещё один пример возможных проблем

Перенос многоязычного сайта: возможна разная схема

Node import: ещё один пример возможных проблем Перенос многоязычного сайта: возможна разная
записи данных о языке и стыковки разноязычных статей/нод

Пример: в исходном материале язык описывается цифровым кодом (1,2,…), разноязычные версии стыкуются по номеру статьи (articlenumber)

В Друпале язык описывается буквенным кодом (en,ru,…), разноязычные версии стыкуются по tnid (номеру ноды-«оригинала»), при этом номера нод не равны номерам статей (nid≠articlenumber)

Слайд 12

Возможное решение

Исходный номер статьи (articlenumber) импортируется во временное поле
Пишется sql-скрипт (или php-код),

Возможное решение Исходный номер статьи (articlenumber) импортируется во временное поле Пишется sql-скрипт
который должен:
Преобразовать коды языков для поля ‘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

Table: node id ноды id версии ноды тип (page, story, etc.) язык
ноды-«оригинала»

статус перевода

Вопреки ожиданиям, в таблице “node” НЕТ ОСНОВНОГО СОДЕРЖАНИЯ НОДЫ (body)
Оно хранится в таблице “node_revisions”

Слайд 15

Table: node_revisions

id ноды

id версии ноды

id пользователя

“тело”

анонс

Формат интерпретации содержания: “filtered html”, “full html”,

Table: node_revisions id ноды id версии ноды id пользователя “тело” анонс Формат
“php”, etc.

Именно в этой таблице хранится основное содержание («тело») ноды

заголовок

Слайд 16

Дополнительные таблицы для нестандартных типов CCK и используемых в них полей

Таблица, где

Дополнительные таблицы для нестандартных типов CCK и используемых в них полей Таблица,
хранятся значения дополнительных полей CCK для нод определённого типа (“intlproj”)

привязка к ноде по id версии и ноды

значения дополнительных полей

Таблица, где хранятся значения дополнительного поля CCK (“areafocus”), используемого в нодах нескольких типов

значение дополнительного поля

привязка к ноде по id версии и ноды

Слайд 17

Таблицы, в которых описана таксономия

Таблицы, в которых описана таксономия

Слайд 18

Данные о файлах и их связи с нодами: таблицы upload и files

Данные о файлах и их связи с нодами: таблицы upload и files

id ноды

id версии ноды

id файла

id пользователя

Слайд 19

Данные об адресах (алиасах) нод: таблица url_alias

Source – системный адрес ‘node/1’

Destination – адрес-псевдоним ‘welcome’

id

Данные об адресах (алиасах) нод: таблица url_alias Source – системный адрес ‘node/1’
адреса

язык, к которому привязан адрес

Слайд 20

Связь таблиц, где хранится информация о ноде

Связь таблиц, где хранится информация о ноде

Слайд 21

Проблема импорта из множества связанных таблиц

В Друпале содержание разбросано по множеству связанных

Проблема импорта из множества связанных таблиц В Друпале содержание разбросано по множеству
таблиц
Что, если в исходной CMS содержание тоже разбросано по разным таблицам?
Прежде чем создавать CSV-файл и подсовывать его под node_import, придётся соединить нужные данные из разных таблиц в одной
Т.е. нужна предварительная обработка исходного материала

Слайд 22

Импорт содержания

CMS – источник данных

Drupal

Выделить содержание определённого типа

Манипуляция данными (например, объединение таблиц,

Импорт содержания CMS – источник данных Drupal Выделить содержание определённого типа Манипуляция
перекодировка, замена значений)

Экспорт таблицы данных

Манипуляция данными

Создать/определить тип CCK и соответствующие поля для импорта содержания

Проанализировать импортируемую таблицу, задать соответствие полей

Импорт таблицы данных

Манипуляция данными

Доработка напильником и др. инструментами

PROFIT! ☺

Слайд 23

Модули для преобразования данных

Import / Export API http://drupal.org/project/importexportapi
Transformations http://drupal.org/project/transformations
This module transforms data. It doesn't care

Модули для преобразования данных Import / Export API http://drupal.org/project/importexportapi Transformations http://drupal.org/project/transformations This
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

Модуль Migrate: зависимость от других модулей Table Wizard Schema Views Migrate Extras.
и взаимодействия с некоторыми другими модулями)
Advanced help - рекомендуется

Слайд 25

Модули Table Wizard (TW) и Schema

Модуль Schema: API для операций с таблицами

Модули Table Wizard (TW) и Schema Модуль Schema: API для операций с
в базе данных
Table Wizard позволяет:
Просматривать, фильтровать и т.п. таблицы в базе данных средствами Views
Анализировать данные – показывать диапазон значений и т.п.
Устанавливать связи между таблицами и совмещать их данные
Импортировать данные из CSV-таблиц
TW предоставляет API для работы других модулей с таблицами базы данных через Views

Слайд 26

Последовательность действий при импорте через Migrate

http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard
http://civicactions.com/blog/2009/jul/25/migrating_your_website_drupal

Последовательность действий при импорте через Migrate http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard http://civicactions.com/blog/2009/jul/25/migrating_your_website_drupal

Слайд 27

Последовательность действий при импорте через Migrate

Втянуть таблицу с данными в MySQL
У

Последовательность действий при импорте через 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

Шаги импорта данных через Migrate Выбор таблицы в Table Wizard: таблица ‘legacy_products’
manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 29

Шаги импорта данных через Migrate

Таблица ‘legacy_products’ выбрана показана информация о её содержании: количество

Шаги импорта данных через Migrate Таблица ‘legacy_products’ выбрана показана информация о её
записей - 4

Pictures from manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 30

Шаги импорта данных через Migrate

Анализ таблицы ‘legacy_products’ поля можно комментировать, помечать как

Шаги импорта данных через Migrate Анализ таблицы ‘legacy_products’ поля можно комментировать, помечать
игнорируемые

Pictures from manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 31

Шаги импорта данных через Migrate

Просмотр содержания таблицы ‘legacy_products’ (без игнорируемых полей)

Pictures from

Шаги импорта данных через Migrate Просмотр содержания таблицы ‘legacy_products’ (без игнорируемых полей)
manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 32

Шаги импорта данных через Migrate

Разметка импорта полей из таблицы в ноду

Pictures from

Шаги импорта данных через Migrate Разметка импорта полей из таблицы в ноду
manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 33

Шаги импорта данных через Migrate

При этом задаются такие назначения для импорта:

Шаги импорта данных через Migrate При этом задаются такие назначения для импорта:

Слайд 34

Шаги импорта данных через Migrate

Задание команды на импорт

Pictures from manual by Angie

Шаги импорта данных через Migrate Задание команды на импорт Pictures from manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard
Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 35

Шаги импорта данных через Migrate

Сообщение о результатах импорта: импортировано 4 записи

Pictures from manual

Шаги импорта данных через Migrate Сообщение о результатах импорта: импортировано 4 записи
by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 36

Шаги импорта данных через Migrate

В списке нод появилось 4 новых ноды они пока

Шаги импорта данных через Migrate В списке нод появилось 4 новых ноды
не опубликованы – чтобы можно было проверить, всё ли с ними в порядке

Pictures from manual by Angie Byron http://www.lullabot.com/articles/drupal-data-imports-migrate-and-table-wizard

Слайд 37

Новое и полезное в Migrate (+TW):

Работа с таблицами в базе данных
Возможность объединения

Новое и полезное в Migrate (+TW): Работа с таблицами в базе данных
данных из нескольких таблиц
Более удобный и наглядный интерфейс для анализа, фильтрации, просмотра, установки соответствий
Возможность автоматического разбора значений, перечисленных через запятую
Hooks для разработчиков дополнительных модулей: см. Migrate: Hooks Migrate API - new in migrate-1.0-beta4 and beyond. http://drupal.org/node/415190

Слайд 38

Развитие Migrate

Для Drupal 6 сделан Migrate 1.0
Migrate 2.0 разрабатывается для D7 –

Развитие Migrate Для Drupal 6 сделан Migrate 1.0 Migrate 2.0 разрабатывается для
после чего планируется backport на D6.
Migrate 2.0 не должно зависеть от модулей Views и Table Wizard
Имя файла: Модуль-MIGRATE-и-другие-средства-импорта-содержания-в-Drupal.pptx
Количество просмотров: 131
Количество скачиваний: 0