33
Migrate API Drupal 7/8 1 Майхер Володимир EPAM Systems

Migrate api drupal 7&8

Embed Size (px)

Citation preview

Page 1: Migrate api drupal 7&8

Migrate API Drupal 7/8 1

Майхер Володимир

EPAM Systems

Page 2: Migrate api drupal 7&8

Модуль migrate

2

Page 3: Migrate api drupal 7&8

Переваги модуля migrate:

• Будь-яке джерело даних (SQL, XML, JSON, CSV)

• Можливість корегувати дані при міграції

• Можливість зробити rollback після імпорту

• Статистика по кожній міграції

• Можливість вказувати залежність міграцій одна від одної

• Інтеграція з drush

• Міграція підчас інсталяції

3

Page 4: Migrate api drupal 7&8

Архітектура модуля migrate:

• MigrateSource

• MigrateDestination

• MigrateMap

• MigrateFieldMapping

4

Page 5: Migrate api drupal 7&8

Архітектура модуля migrate:5

Page 6: Migrate api drupal 7&8

Запуск міграції:

6Migrate в Drupal 7

• Migrate_ui

• drush

Page 7: Migrate api drupal 7&8

7migrate_ui

Page 8: Migrate api drupal 7&8

8migrate_ui

Page 9: Migrate api drupal 7&8

migrate_ui 9

Page 10: Migrate api drupal 7&8

migrate_ui 10

Page 11: Migrate api drupal 7&8

migrate_ui 11

Page 12: Migrate api drupal 7&8

drush команди

drush migrate-fields-destination (mfd)

drush migrate-fields-source (mfs)

drush migrate-import (mi)

drush migrate-mappings (mm)

drush migrate-messages (mmsg)

drush migrate-reset-status (mrs)

drush migrate-rollback (mr)

drush migrate-status (ms)

drush migrate-stop (mst)

drush migrate-analyze (maz)

drush migrate-audit (ma)

drush migrate-register (mreg)

drush migrate-deregister

drush migrate-wipe (mw)

12

Page 13: Migrate api drupal 7&8

drush опції

--all

--idlist

--instrument

--limit

--stop

--update

13

Page 14: Migrate api drupal 7&8

Приклади використання з drush

• drush migrate-import BrandTerm – виконання міграції з машинною назвою “BrandTerm”

• drush migrate-import BrandTerm --update – імпортує нові елементи і оновлює існуючі

• drush migrate-import BrandTerm --idlist=4,9 – імпорт двох окремих елементів з id = 4 та id

= 9. Id беруться з таблиці мапінгу.

Більше на https://www.drupal.org/node/1561820.

14

Page 15: Migrate api drupal 7&8

Як створити міграцію? 15

galauto_migrate.module

galauto_migrate.migrate.inc

У файлі galauto_migrate.info

вказуємо звичну інформацію.

<?php

/**

* @file

* THIS SPACE INTENTIONALLY LEFT BLANK.

*/

<?php

/**

* Implements hook_migrate_api().

*/

function galauto_migrate_migrate_api() {

$api = array(

'api' => 2,

'migrations' => array(

'BrandTerm' => array('class_name' => 'BrandTermMigration'),

),

);

return $api;

}

Page 16: Migrate api drupal 7&8

Як створити міграцію? 16

brand.inc

<?php

class BrandTermMigration extends Migration {

public function __construct() {

parent::__construct();

Об`являємо клас

Page 17: Migrate api drupal 7&8

Як створити міграцію? 17

brand.inc Source об`єкт

$query = db_select('car_mark', 'mark')

->fields('mark', array('id_car_mark', 'name'));

$this->source = new MigrateSourceSQL($query);

Page 18: Migrate api drupal 7&8

Як створити міграцію? 18

brand.inc Source об`єкт

Source класи: • MigrateSourceSQL

• MigrateSourceList

• MigrateSourceMultiitems

• MigrateSourceXML

• MigrateSourceCSV

• MigrateSourceMSSQL

• MigrateSourceOracle

• MigrateSourceMongoDB

• MigrateListJSON and MigrateItemJSON

• MigrateListFile and MigrateItemFile

Page 19: Migrate api drupal 7&8

Як створити міграцію? 19

brand.inc Destination об`єкт

Destination класи: • MigrateDestinationRole

• MigrateDestinationUser

• MigrateDestinationTerm

• MigrateDestinationNode

• MigrateDestinationComment

• MigrateDestinationFile

• MigrateDestinationNodeRevision

• MigrateDestinationTable

$this->destination = new MigrateDestinationTerm('brands');

Page 20: Migrate api drupal 7&8

Як створити міграцію? 20

brand.inc Об`єкт мапінгу

Клас мапінгу: • MigrateSQLMap

$source_key_schema = array(

'id_car_mark' => array(

'type' => 'int',

'unsigned' => TRUE,

'not null' => TRUE,

)

);

$this->map = new MigrateSQLMap($this->machineName, $source_key_schema,

MigrateDestinationTerm::getKeySchema());

Page 21: Migrate api drupal 7&8

Як створити міграцію? 21

brand.inc Мапінг полів

$this->addFieldMapping('name', 'name')

->description(t('The incoming name(source) field is the name of the term'));

$this->addFieldMapping('format')

->issueGroup(t('DNM'));

$this->addFieldMapping('weight')

->issueGroup(t('DNM'));

Page 22: Migrate api drupal 7&8

Як створити міграцію?

<?php

class BrandMigration extends Migration {

public function __construct() {

parent::__construct();

$this->description = t('Migrate car brands from the source database to taxonomy terms');

$source_key_schema = array(

'id_car_mark' => array(

'type' => 'int',

'unsigned' => TRUE,

'not null' => TRUE,

)

);

$this->map = new MigrateSQLMap($this->machineName, $source_key_schema,

MigrateDestinationTerm::getKeySchema());

$query = db_select('car_mark', 'mark')

->fields('mark', array('id_car_mark', 'name'))

$this->source = new MigrateSourceSQL($query);

$this->destination = new MigrateDestinationTerm('brands');

$this->addFieldMapping('name', 'name')

->description(t('The incoming name(source) field is the name of the term parent'));

$this->addFieldMapping('description')

->issueGroup(t('DNM'));

}

}

22

brand.inc

Page 23: Migrate api drupal 7&8

Додаткові методи 23

brand.inc

• function prepareRow($row)

• function prepare($entity, stdClass $row)

• function complete($entity, stdClass $row)

Page 24: Migrate api drupal 7&8

Migrate в Drupal 8 24

Page 25: Migrate api drupal 7&8

• Migrate

• Migrate Drupal

25Міграція в ядрі

Page 26: Migrate api drupal 7&8

• Для міграції Drupal 6 → Drupal 8 можна використати модуль upgrade або drush

• для інших лише drush

26Як запустити міграцію?

Page 27: Migrate api drupal 7&8

Містить плагіни для міграції основних компонентів Drupal 6/7, таких як, контент типи,

поля, користувачі, ноди, таксономія та інші.

27Migrate Drupal

Лише Drupal 6 на даний момент

Page 28: Migrate api drupal 7&8

Для написання міграції обов`язково створити файли:

28Migrating from Drupal 7

Page 29: Migrate api drupal 7&8

Migrating from Drupal 7 29

migrate.migration.custom_user.yml

Page 30: Migrate api drupal 7&8

Migrating from Drupal 7 30

User.php

Page 31: Migrate api drupal 7&8

Migrating from Drupal 7 31

manifest.yml

Для запуску міграції в консолі пишемо:

drush migrate-manifest <manifest-name> --legacy-db-url=mysql://<username>:<password>@<host>:<portno>/<db_name>

drush migrate-manifest manifest.yml --legacy-db-url=mysql://root:root@localhost/drupal7

Має знаходитись в корені Drupal

- custom_user

Page 32: Migrate api drupal 7&8

32Запитання?

Page 33: Migrate api drupal 7&8

Дякую за увагу

Skype: vmaikher

Email: [email protected]

33