Я пытаюсь перенести html-код в несколько абзацев, которые нужно как-то связать.Моя идея состоит в том, чтобы они связали мой идентификатор, полученный из набора данных, возможно, используя этот идентификатор в качестве второго источника. Мой код в настоящее время создает несколько абзацев, но между ними нет связи. Данные поступают из csv, и я использую Drupal 9.
TLDR: как сопоставить один столбец из CSV-файла с несколькими строками в таблице сопоставления.
Код yml (данные - это код html)
процесс:
тип:
плагин: default_value
default_value: ссылка
код языка: kieli
Название: Ними
default_langcode:
плагин: default_value
default_value: правда
field_multi_paragraphs:
- плагин: параграф_генерировать
entity_type: абзац
источник: Данные #бесполезно
ключ_значения: идентификатор
ценности:
field_data: Данные
пункт назначения:
плагин: 'entity_reference_revisions:paragraph'
Код, который генерирует абзацы
/**
*
* @MigrateProcessPlugin(
* id = "параграф_генерировать"
* )
*/
класс ParagraphGenerate расширяет EntityGenerate {
публичная функция преобразования ($ значение, MigrateExecutableInterface $ migrateExecutable, строка $ строка, $ destinationProperty) {
$this->строка = $строка;
$this->migrateExecutable = $migrateExecutable;
$result = $this->generateEntity($value);
вернуть $результат;
}
защищенная функция generateEntity($value) {
$dom = новый DOMDocument();
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $value);
$html = $dom->getElementsByTagName('body')->item(0);
$returnArray=[];
foreach ($html->childNodes как $child) {
если ($child->tagName === 'p') {
$абзац = абзац::создать([
'тип' => 'текст',
'field_text' => массив (
"значение" => $child->nodeValue,
"формат" => "обычный"
),
]);
$абзац->сохранить();
$returnArray[] = ['target_id' => $paragraph->id(), 'target_revision_id' => $paragraph->getRevisionId()];
}
}
вернуть пустой ($ returnArray)? ПУСТО: $returnArray;
}
}