Как перенести контент из файлов XML в Drupal 8 (или 9)
Опубликовано: 2021-10-05Перенос данных из разных источников в вашу CMS Drupal — вот что такое миграция. Источником миграции может быть что угодно — база данных, другая CMS, CSV, XML-файлы. Drupal всегда дает вам возможность переносить данные из любого места в CMS. Ранее мы много писали о миграции Drupal, например о миграции из источника базы данных, миграции многоязычного контента из CSV, из источника SQL, полном руководстве по миграции и многом другом! Если вы ищете руководство по переносу данных из XML-файлов в Drupal 8 или Drupal 9, вы попали в нужное место, так как именно об этом мы и поговорим здесь!
Если вы хотите импортировать внешние каналы на свой веб-сайт Drupal 9 с помощью модуля Drupal Feeds, ознакомьтесь с этой статьей.

Модули миграции Drupal 8/9
Здесь мы будем использовать весь набор модулей миграции Drupal.
- Мигрировать
- Перенести Друпал
- Миграция плюс
- Инструменты переноса
После установки этих модулей вам нужно будет создать собственный модуль, в котором вы напишете скрипт для миграции. Итак, сначала создайте собственный модуль, а затем создайте файл info.yml, который будет включать детали модуля. Далее включите модуль.
name: test migration type: module description: Migrating data from the csv files. core_version_requirement: ^8 || ^9 package: Migration dependencies: - drupal:migrate_source_csv - drupal:migrate_plus - drupal:migrate_tools config_devel: install: - migrate_plus.migration_group.test_migration - migrate_plus.migration.test_migration_sessions - migrate_plus.migration.test_migration_paper - migrate_plus.migration.test_migration_user
После создания файла info.yml вам необходимо создать группу миграции для этой миграции. Вам нужно будет создать эту группу миграции по пути: test_migration > config > install . Эти данные необходимы при выполнении миграции:
id: test_migration label: test Migration description: Migrating xml data
После создания группы миграции установите эту группу в свой файл info.yml.
config_devel: install: - migrate_plus.migration_group.test_migration
Теперь вам нужно написать сценарий миграции для типа контента. Этот скрипт должен находиться внутри config > install, а имя файла должно быть migrate_plus.migration.test_migration_paper.yml.
id: test_migration_paper label: 'Migrate Paper data from the xml file' migration_group: test_migration source: plugin: url # Full path to the file. data_fetcher_plugin: file data_parser_plugin: xml urls: private://xml/session.xml item_selector: /program/session/papers/paper fields: - name : title lable : 'Paper title' selector : papertitle - name : abstract lable : 'Paper abstract' selector : abstract - name : first_name label : 'Author first name' selector : authors/author/name/givenname - name : last_name label : 'Author last name' selector : authors/author/name/surname - name : paper_id label : 'Paper identifier' selector : paperid - name : session_id label : 'Session identifier' selector : sessionid - name : start_time label : 'Paper presentation start time' selector : starttime - name : end_time label : 'Paper presentation end time' selector : endtime - name : author_name label : 'Author name' selector : authors/author/name/fullname - name : session lable : 'Session name' selector : session ids: session_id : type : string process : # Adding the mapping between the fields and the csv columns. title : - plugin : skip_on_empty method : process source : title field_abstract/value : abstract field_abstract/format : plugin : default_value default_value : "full_html" field_presentation_timing/value : plugin : format_date from_format : 'Ymd\TH:i:s' to_format : 'Ymd\TH:i:s' source : start_time field_presentation_timing/end_value : plugin : format_date from_format : 'Ymd\TH:i:s' to_format : 'Ymd\TH:i:s' source : end_time field_paper_identifier : paper_id field_session_identifier : session_id field_author : - plugin : skip_on_empty method : process source : author_name - plugin : paper_user_migration_import_process no_stub : true field_session : - plugin : skip_on_empty method : process source : session - plugin : node_migration_import_process no_stub : true destination : plugin : 'entity:node' default_bundle : paper migration_dependencies : required : { } dependencies : { }


- id : будет уникальным для каждого файла yaml и будет отображаться в списке миграции.
- label : будет содержать описание миграции.
- migration_group : это основная группа, содержащая все миграции.
- source : Will содержит все сведения об источнике для этой миграции.
- urls : будет содержать файл для миграции. В приведенном выше коде источник помещается в приватный каталог.
- item_selector : селектор элементов — это путь, по которому берется весь набор данных. По сути, внутри этого тега должен быть один набор данных.
- fields : Здесь мы присваиваем значения тегов некоторым переменным.
- name : что дает имена переменных.
- label : Краткое описание.
- selector : в котором мы говорим, какое значение тега должно быть присвоено переменной.
- ids : должны быть уникальными для каждого контента.
- process : в котором мы сопоставляем имена переменных и полевых машин.
- назначение : в котором мы упоминаем имя объекта, в который должны быть перенесены данные.
На основе ваших данных теперь вы также можете писать плагины для миграции. Приведенный выше плагин кода написан для поля field_author .
После этого перейдите в Структуру , там вы увидите Миграция — нажмите на нее. Теперь вы можете увидеть все группы миграции.

Щелкните Миграция списка . Там вы можете увидеть список yaml миграции, который мы создали.

Нажмите кнопку « Выполнить ». Вы можете увидеть варианты миграции.

Здесь вы можете запустить любой вариант, который вы хотите:
- Импорт: это приведет к переносу данных.
- Откат: будут откатываться все перенесенные данные.
- Остановить: остановит миграцию в середине процесса.
- Сброс: изменит статус на состояние ожидания.
Вы также можете перенести содержимое через терминал с помощью этих команд drush.
- drush ms - Статус миграции
- drush mim <migration_id> - Импорт миграции
- drush mr <migration_id> — Откат миграции
- drush mrs <migration_id> — сделать статус миграции неактивным.