Рейтинг:1

Импорт содержимого в узлы с полями media:image с помощью Migrate from csv source

флаг mx

Я пытаюсь импортировать содержимое из .csv файл в статья узлы новой установки D9 с использованием Мигрировать, Миграция плюс, Инструменты переноса, Перенести источник CSV и Перенести файл (расширенный)

Мой статья тип контента имеет field_article_media_image ожидание элемента медиа-изображения.

Когда я запускаю миграцию, статьи созданы правильно, НО field_article_media_image по-прежнему пуст. Я вижу, что изображение было импортировано в файловую систему, но создано как файл, а не как элемент мультимедиа (отсутствует на вкладке мультимедиа), и оно не связано со статьей.

//import-articles.yml

идентификатор: import_articles
label: Импорт статей
миграция_группа: import_articles_group

пункт назначения:
  плагин: сущность: узел

источник:
  константы:
    DESTINATION_PATH: 'public://migrations/articles/images/'
  плагин: 'CSV'
  путь: 'миграции/статьи/articles.csv'
  разделитель: ';'
  вложение: '"'
  header_offset: 0
  идентификаторы:
    - я бы
  поля:
    0:
      имя: идентификатор
      метка: «Идентификатор»
    1:
      имя: титул
      метка: 'Название'
    2:
      имя: тело
      этикетка: "Тело"
    3:
      имя: field_article_media_image
      метка: 'Изображение'
процесс:
  название: название
  тело/значение: тело
  тело/формат:
    плагин: default_value
    default_value: 'basic_html'
  field_article_media_image:
    - плагин: image_import
      источник: field_article_media_image
      пункт назначения: константы/DESTINATION_PATH
      название: название
      skip_on_error: правда
    - плагин: журнал
  тип:
    плагин: default_value
    default_value: статья

Лог ошибок не дает. Я что-то упускаю или делаю что-то не так?

РЕДАКТИРОВАТЬ

После того, что прокомментировал @Joseph, я попробовал этот код:

...
    field_article_media_image:
        источник: field_article_media_image
        плагин: entity_lookup
        entity_type: медиа
        комплект: изображение
        bundle_key: пакет
        ключ_значения: 'имя'
        доступ_проверить: 0
...

Теперь все работает, я думаю значение_ключ нужные цитаты и может быть доступ_проверить должно быть установлено значение false.

Рейтинг:0
флаг in

То, как ваша статья связана с изображением, на самом деле выглядит так:

Статья (узел) -> Изображение (медиа) -> Файл (файл)

Так что на самом деле есть три миграции, которые вы должны выполнить, при условии, что вы не делаете ничего особенного и просто выполняете ванильные миграции.

  • Первая миграция будет на Файл юридическое лицо. Назначение этой миграции сущность:файл который перенесет информацию в файл_управляемый Таблица. Это то, что переносит метаданные файла, например, где он находится в файловой системе, когда он был изменен, когда он был изменен и т. д.

  • Вторая миграция будет на СМИ юридическое лицо. Назначение этой миграции сущность: СМИ с комплектом изображение, который создаст медиаобъект файла. Эта миграция обычно 1:1 с файлом, который она представляет. Это сущность, с которой должны быть связаны другие сущности в системе. Вы делаете migrate_lookup на Файл миграция с использованием идентификатора этого файла.

    • Я считаю, что это миграция, которую вам не хватает.
  • Последняя миграция будет вашей Статья миграция, которая является данными вашей статьи из вашего CSV (миграция, которую вы написали). Вам нужно будет сделать migrate_lookup при переносе носителя с использованием идентификатора файла для field_article_media_image.

флаг mx
Тем временем мне удалось импортировать изображения как объекты мультимедиа (используя drupal/media_library_importer). Могу ли я сразу перейти к последней миграции? Название элемента мультимедиа — это уникальный ключ, который у меня есть в моем файле .csv.
флаг in
@laurent Если вы использовали другие инструменты, кроме Migrate API, для переноса медиа, ваша миграция статьи не может использовать [`migration_lookup`](https://api.drupal.org/api/drupal/core!modules!migrate!src!Plugin! migrate!process!MigrationLookup.php/class/MigrationLookup) плагин для ссылки статьи на медиа.Но вы можете создать [плагин процесса](https://www.drupal.org/docs/8/api/migrate-api/migrate-process/writing-a-process-plugin) и использовать этот столбец в CSV для найдите правильный объект мультимедиа в БД, используя [Entity API] (https://www.drupal.org/docs/drupal-apis/entity-api/introduction-to-entity-api-in-drupal-8).
флаг mx
В Migrate Plus плагин `entity_lookup`, кажется, делает именно то, что я хочу, приведенный пример — это _hooking_ узлы для пользовательских объектов, я не знаю, как транспонировать медиа-объекты, но это не кажется слишком сложным. Я новичок в Drupal, поэтому, если я смогу избежать написания плагина...
флаг in
@laurent `entity_lookup` может делать то, что я описал. Вам просто нужно настроить его так, чтобы он указывал на правильные `entity_type` ("media"), `bundle` ("image"), `bundle_key` ("bundle") и, самое главное, `value_key` - имя машины поле в вашем медиаобъекте, которое содержит значение, совпадающее со значением в ваших статьях CSV.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.