In diesem Kapitel geht es um die Grundlagen von Neos. Genauer gesagt schauen wir uns die Content-Repository an und definieren anschließend unseren ersten eigenen NodeType.
Ein wenig Theorie bevor wir durchstarten. Inhalte in Neos sind werden in sogenannten Nodes gespeichert. Das können unter anderem Seiten, Medien, Text, Headlines, Formulare, Buttons, Menüs oder Links sein. The sky is the limit.
Nodes können andere Nodes in sich halten. Dadurch, dass Nodes verschachtelt sein können, werden sie in einer Art Baumstruktur gespeichert (Stichworte Document- und Content Tree). Dieser Baum aus Nodes ist die Content-Repository. Der Vorteil dieses Baumes liegt darin, dass er einfach zu durchlaufen ist, sodass die beinhalteten Nodes wo anders abgerufen und wiederverwendet werden können. Die verschiedenen Arten von Nodes (Medien, Text etc.) werden NodeTypes genannt und müssen selbst gebaut oder aus Packages installiert werden.
NodeTypes, manchmal auch Inhaltselemente genannt, bestehen im Grundlegenden aus mindestens zwei Teilen:
Wir wollen also unsere ersten eigenen NodeType erstellen. Und zwar einen Banner. Dazu erstellen wir zuerst die YAML-Datei.
'NeosTutorial.Site:Content.Banner':
superTypes:
'Neos.Neos:Content': TRUE
ui:
label: 'Banner'
group: 'general'
icon: 'icon-lightbulb'
properties:
text:
type: 'string'
defaultValue: 'Bannertext'
ui:
inlineEditable: TRUE
Damit haben wir ein neuen NodeType erstellt, der auch schon im Backend auswählbar ist.
So weit so gut. Nur was hat das zu bedeuten? Grundsätzlich lässt sich sowas in den Neos Docs nachschlagen, wir können aber trotzdem einmal über die Zeilen drüber gehen.
Laden wir das Backend neu und klicken im “Create New”-Fenster nun auf unseren neuen NodeType, bekommen wir einen netten Fehler.
Wir müssen nämlich die eigentliche Logik des NodeTypes noch bauen. Das ist der Fusion-Teil.
Hier lohnt es sich vorher schlau zu machen was Fusion ist und wie es funktioniert. Darum wird es im nächsten Kapitel gehen.
Um uns in Zukunft Arbeit zu ersparen, können wir Standard-NodeTypes, von denen wir immer erben erweitern bzw. überschreiben.
Davon möchten auch wir auch gebrauch machen und eine neue Inspektor-Gruppe erstellen, wo unsere eigenen NodeType-Properties platziert werden können.
In der Regel erben wir fast immer von Neos.Neos:Content, also erweitern wir diesen NodeType. Dafür wird die Datei NodeTypes.yaml erstellt und mit dem Code gefüllt:
#Configuration/NodeTypes.yaml
"Neos.Neos:Content":
ui:
inspector:
groups:
config:
label: "Konfiguration"
position: 1
tab: "default"
Hierzu wurde unter ui.inspector.groups die Gruppe namens config definiert. Unter tab wird angegeben, in welchem Inspektor-Tab die Gruppe auftaucht. Der Tab default stammt aus einem Eltern-NodeType von Neos.Neos:Content.