Skip to content

PHP API ​

Zwei Fassaden mit statischen Methoden decken die programmatische Arbeit mit Dokumenten ab; auch die REST API und die Bundle-CLI-Befehle nutzen sie.

Renick\Content\Classes\Content ​

Die schreibsichere Fassade. Jeder Schreibvorgang normalisiert und validiert das Dokument strikt (ApplicationException bei Fehlern), sichert den vorherigen Zustand, damit er sich rückgängig machen lässt, speichert den Host in seinem eigenen Site-Kontext, zeichnet eine Version auf und reindiziert die Media Usage.

MethodeVerhalten
get(Model $host, string $field): arraydekodiertes Dokument; ['blocks' => []] bei leerem oder ungültigem Inhalt
put(Model $host, string $field, string|array $document, string $action = 'import'): arrayder obige Schreibvorgang; gibt das normalisierte Dokument zurück
duplicate(Model $host, string $field, ?Model $targetHost = null): arrayKopie mit neuen Block-IDs, nach $targetHost geschrieben, falls angegeben
export(Model $host, string $field): array['document' => …, 'media' => [paths…]]
import(Model $host, string $field, array $bundle, string $mode = 'replace'): arrayschreibt $bundle['document']; es gibt nur den Modus replace
exportBundle(Model $host, string $field): stringZIP-Bytes: document.json, manifest.json, media/<pfad>; fehlende Dateien stehen im Manifest
exportBundleToFile(Model $host, string $field): stringdasselbe ZIP als temporäre Datei, die der Aufrufer löscht
importBundle(Model $host, string $field, string $zipBytes, string $mode = 'replace', bool $overwriteMedia = false): arrayschreibt das Dokument und stellt dann die Medien wieder her (vorhandene Dateien bleiben, außer bei $overwriteMedia); liefert document, media (restored, skipped, failed) und portability. Fehlgeschlagene Medien werfen BundleImportException mit dem Teilergebnis in getResult()
applyTemplate(Model $host, string $field, Template $template): arrayersetzt das Dokument durch eine Kopie der Vorlage mit neuen IDs
translate(Model $host, string $field, string $targetLanguage, ?string $sourceLanguage = null): arrayübersetzt per KI und schreibt; gibt ['document' => …, 'warning' => ?string] zurück

Versionen werden per Content-Hash dedupliziert; aufbewahrt werden die neuesten 50 ungepinnten Snapshots pro Host und Feld (renick.content::versions.keep).

Renick\Content\Classes\ContentApi ​

Reine Helfer ohne Persistenz:

MethodeVerhalten
duplicateDocument(string|array $document): string|arraytiefe Kopie mit frischen b_…-IDs; gibt den übergebenen Typ zurück
duplicateBlock(array $block): arrayneue IDs für einen Block-Teilbaum
toPlainText(string|array $document): stringText aus text, title, caption, alt, author, label und html ohne Tags, für Suche und SEO
excerpt(string|array $document, int $limit = 160): stringgekürzter Klartext

Rufe duplicateDocument() immer auf, wenn du einen Datensatz mit Dokument klonst: Block-IDs müssen pro Dokument eindeutig bleiben.

Events ​

Die meisten Events stehen unter Events. Die Media- und KI-Events:

EventAusgelöstPayload / Rückgabe
renick.content.media.collectUsagebei jedem Media-Reindex eines Hosts + Felds($host, $fieldName, $decodedDocument); gib zusätzliche Medienpfade für Usage-Index und Delete Guard zurück
renick.content.ai.beforeRequestvor jedem KI-Chat-Request (halting)(&$payload) per Referenz; gib ein geändertes Array zurück, um ihn zu ersetzen
php
Event::listen('renick.content.media.collectUsage', function ($host, $fieldName, $document) {
    return ['/seo/og-image.png'];
});