Hi Maximilian,
did nearly the same few weeks ago.
The task was to create pages in neos under a specified node and add some nodetypes to this elements. First I converted the data i had (excel file) to an php array and than used a foreach to iterate through the data.
$count=0;
foreach($jayParsedAry as $rezeptur){
// Excel Datei bei Google Sheets importieren
// als CSV Datei speichern
// https://csvjson.com/csv2json CSV TO JSON bei Options nur array anhaken alles andere aus
// https://jsontophp.com/ JSON nach PHP Array
$context = $this->contextFactory->create();
$nodeIdentifier='3ea6344f-5233-4951-ac1e-23ab5330886f';
$parentNode = $context->getNodeByIdentifier($nodeIdentifier);
// Seite anlegen
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Document.Produkt'));
$nodeTemplate->setProperty('title',$this->replaceAsterisk($rezeptur['Artikel Bezeichnung']));
$newNode = $parentNode->createNodeFromTemplate($nodeTemplate);
$this->output->outputLine($newNode->getIdentifier());
// ContentCollection der neuen Seite
$contentCollection = $newNode->getPrimaryChildNode();
// Produkt-Slider anlegen
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.ProductSlider'));
$nodeTemplate->setProperty('title',$this->replaceAsterisk($rezeptur['Artikel Bezeichnung']));
$nodeTemplate->setProperty('subtitle','Art-Nr '.$this->replaceAsterisk($rezeptur['Artikel Nr.']));
$nodeProduktSlider = $contentCollection->createNodeFromTemplate($nodeTemplate);
$produktSliderCollection = $nodeProduktSlider->getPrimaryChildNode();
// Produkt-Slider Item anlegen
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.ProductSlider.Item'));
$produktSliderCollection->createNodeFromTemplate($nodeTemplate);
// Anker-Links anlegen
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.AnkerLinks'));
$nodeAnkerLinks = $contentCollection->createNodeFromTemplate($nodeTemplate);
$ankerLinksContentCollection = $nodeAnkerLinks->getPrimaryChildNode();
// Anker-Links Items anlegen
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.AnkerLinks.Item'));
$nodeTemplate->setProperty('title','Produktdetails');
$nodeTemplate->setProperty('anker','produktdetails');
$ankerLinksContentCollection->createNodeFromTemplate($nodeTemplate);
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.AnkerLinks.Item'));
$nodeTemplate->setProperty('title','Downloads');
$nodeTemplate->setProperty('anker','downloads');
$ankerLinksContentCollection->createNodeFromTemplate($nodeTemplate);
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.AnkerLinks.Item'));
$nodeTemplate->setProperty('title','Ansprechpartner');
$nodeTemplate->setProperty('anker','as');
$ankerLinksContentCollection->createNodeFromTemplate($nodeTemplate);
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.AnkerLinks.Item'));
$nodeTemplate->setProperty('title','Kundenbereich');
$nodeTemplate->setProperty('title','Kundenbereich');
$nodeTemplate->setProperty('anker','login');
$ankerLinksContentCollection->createNodeFromTemplate($nodeTemplate);
// Text (SUB-HEADLINE) anlegen, class=subtitle-text
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.Text'));
$nodeTemplate->setProperty('stil','sub-title-text');
$nodeTemplate->setProperty('ausdehnung','col-lg-12');
$nodeTemplate->setProperty('ausrichtung_rahmen','');
$nodeTemplate->setProperty('ausrichtung','text-left');
$nodeTemplate->setProperty('text','<p><strong>Art.-Nr: '.$this->replaceAsterisk($rezeptur['Artikel Nr.']).' | '.$this->replaceAsterisk($rezeptur['Rezeptur Name']).'</strong></p>');
$contentCollection->createNodeFromTemplate($nodeTemplate);
// Headline anlegen
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.Headline'));
$nodeTemplate->setProperty('ausdehnung','col-lg-12');
$nodeTemplate->setProperty('color','');
$nodeTemplate->setProperty('ausrichtung_rahmen','');
$nodeTemplate->setProperty('ausrichtung','text-left');
$nodeTemplate->setProperty('anchorname','produktdetails');
$nodeTemplate->setProperty('title','<h4>'.$this->replaceAsterisk($rezeptur['Artikel Bezeichnung']).'</h4>');
$contentCollection->createNodeFromTemplate($nodeTemplate);
// Text
$nodeTemplate = new \Neos\ContentRepository\Domain\Model\NodeTemplate();
$nodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Example.Site:Content.Text'));
$nodeTemplate->setProperty('stil','');
$nodeTemplate->setProperty('ausdehnung','col-lg-12');
$nodeTemplate->setProperty('ausrichtung_rahmen','');
$nodeTemplate->setProperty('ausrichtung','text-left');
$nodeTemplate->setProperty('text','<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. </p>');
$contentCollection->createNodeFromTemplate($nodeTemplate);
$count++;
}
$this->output->outputLine($count.' datensätze importiert');
// der vollständigkeit wegen...
protected function replaceAsterisk($value){
$value = nl2br($value);
$value = str_replace('***','"', $value);
return $value;
}
I truncated the example a bit because there is just a lot of repetition adding the nodetypes.
Created this in an CommandController to do the import over the cli. It is a “import once do not touch again”-thing because of recreating the pages on every execution…
Hope this helps!
Göks