Wann Code statt No-Code-Builder
Der No-Code-Builder (siehe Nutzer-Dokumentation) reicht für die meisten Fälle. Echter Code lohnt sich, sobald typ-spezifische SONDERFELDER gebraucht werden, die über Titel/Text/Kategorien/Tags/Beitragsbild hinausgehen - z.B. Position und Foto bei einem Team-Mitglied.
Ordnerstruktur
repository/contents/MeinTyp/
manifest.json
ContentType.php
templates/default/single.tpl
templates/default/teaser.tpl
templates/default/archive.tpl
Ein Content-Typ liefert AUSSCHLIESSLICH Daten - kein HTML, kein Wissen über Themes. Allgemeine Felder (Titel, Slug, Body, Erstellungsdatum) muss er NICHT wiederholen, die stellt ContentTypeFactory automatisch bereit - getViewData() liefert nur die TYP-SPEZIFISCHEN Zusatzfelder, aus content->getExtra() ausgelesen (dort landet alles, was per renderAdminFields()/parseAdminFields() im Admin-Formular eingegeben wurde, als JSON gespeichert).
ContentType.php
namespace Contents\MeinTyp;
use Nexis\Content\Content;
use Nexis\Content\ContentTypeAdminInterface;
use Nexis\Content\ContentTypeInterface;
class ContentType implements ContentTypeInterface, ContentTypeAdminInterface {
public function getViewData(Content $content): array {
$extra = $content->getExtra();
return ['sonderfeld' => $extra['sonderfeld'] ?? null];
}
public function renderAdminFields(array $extra): string {
$wert = htmlspecialchars($extra['sonderfeld'] ?? '');
return <<<FORMHTML
<div class="col-12">
<label class="form-label" for="sonderfeld">Sonderfeld</label>
<input class="form-control" id="sonderfeld" type="text" name="sonderfeld" value="{$wert}">
</div>
FORMHTML;
}
public function parseAdminFields(array $post): array {
return ['sonderfeld' => trim($post['sonderfeld'] ?? '') ?: null];
}
}
ContentTypeAdminInterface ist optional
Nur nötig, wenn der Typ eigene Zusatzfelder im Admin-Formular braucht (wie oben). Reicht ContentTypeInterface allein, bleibt das Admin-Formular auf die allgemeinen Felder beschränkt.
Eigene Standard-Templates mitliefern
Genau wie bei den Erweiterungen Shop/Features/Partner/NewsBlog: eigene Standard-Vorlagen unter templates/default/ mitliefern, damit der Typ automatisch in JEDEM Theme funktioniert, auch ohne dass das jeweilige Theme selbst eine typ-spezifische Vorlage mitbringen müsste.
Vollständiges Beispiel zum Herunterladen
Ein Content-Typ "Team-Mitglied" - genau das oben gezeigte Muster, real installierbar und getestet, inklusive aller drei Templates (single/teaser/archive).
ExampleContentType.zip herunterladen
Hinweis: Wer einen eigenen Content-Typ im NexisCore-Marktplatz veröffentlichen möchte, kann optional eine market.md beilegen und den Schnellupload nutzen, statt das Formular von Hand auszufüllen. Mehr dazu: Schnellupload & market.md →