Încerc să migrez codul html în mai multe paragrafe care trebuie să fie legate între ele cumva.Ideea mea este să le pun în legătură ID-ul meu care provine din setul de date, poate folosind acel ID ca a doua sursă. Codul meu creează în prezent mai multe paragrafe, dar nu există nicio legătură între ele. Datele vin din csv și folosesc Drupal 9
TLDR: Cum să mapați o coloană din fișierul csv în mai multe rânduri în tabelul de mapare.
Codul yml (datele sunt codul html)
proces:
tip:
plugin: default_value
default_value: link
cod de limbă: kieli
titlu: Nimi
default_langcode:
plugin: default_value
default_value: adevărat
field_multi_paragraphs:
- plugin: paragraph_generate
tip_entitate: paragraf
sursa: Date #inutile
value_key: id
valori:
field_data: date
destinaţie:
plugin: 'entity_reference_revisions:paragraph'
Codul care generează paragrafele
/**
*
* @MigrateProcessPlugin(
* id = "paragraph_generate"
* )
*/
clasa ParagraphGenerate extinde EntityGenerate {
transformare funcție publică ($valoare, MigrateExecutableInterface $migrateExecutable, Rând $rând, $destinationProperty) {
$acest->rând = $rând;
$this->migrateExecutable = $migrateExecutable;
$rezultat = $this->generateEntity($value);
returnează $rezultat;
}
funcția protejată generateEntity($value) {
$dom = nou DOMDocument();
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $value);
$html = $dom->getElementsByTagName('body')->item(0);
$returnArray= [];
foreach ($html->childNodes ca $child) {
if ($child->tagName === 'p') {
$paragraf = Paragraf::create([
'type' => 'text',
'field_text' => matrice(
„value” => $child->nodeValue,
"format" => "simplu"
),
]);
$paragraf->salvare();
$returnArray[] = ['target_id' => $paragraph->id(), 'target_revision_id' => $paragraph->getRevisionId()];
}
}
return empty($returnArray) ? NULL : $returnArray;
}
}