Codebeispiele für Statamic Entries

Wenn du mit Entries in Statamic arbeitest, eröffnet dir die Entry Facade eine Vielzahl an Möglichkeiten, deine Inhalte effizient zu verwalten und anzupassen. Um beispielsweise alle Einträge einer bestimmten Collection abzufragen, genügt folgender Befehl:

use Statamic\Facades\Entry;

Entry::query()->where("collection", "posts")->get();

Dieses Snippet zeigt, wie du mit der Entry Facade alle Einträge aus der Collection posts abrufen kannst. Die Methode get() führt die Abfrage aus und liefert die Ergebnisse im gewünschten Format.

Falls du nur die Einträge eines bestimmten Nutzers innerhalb einer Collection abfragen möchtest, kommt zusätzlich die User Facade zum Einsatz:

use Statamic\Facades\Entry;
use Statamic\Facades\User;

$author = User::findByEmail('user@example.com');

Entry::query()->where('collection', 'pages')->where('author', $author->id())->get();

Hier wird zunächst der User über seine E-Mail gesucht und anschließend nach Einträgen gefiltert, die dieser Nutzer in der Collection pages erstellt hat.

Neben der Möglichkeit, Einträge nach Collections und Nutzer zu filtern, bietet Statamic auch die Abfrage nach bestimmten Blueprints an:

use Statamic\Facades\Entry;

Entry::query()->where('blueprint', 'page')->get();

Dieses Beispiel zeigt, wie du alle Einträge mit einem bestimmten blueprint, wie hier dem ‚page‘-Blueprint, erhältst. Blueprints definieren die Struktur der Daten in Statamic und ermöglichen so ein gezieltes Filtern von Inhalten.

Ein weiteres interessantes Feature ist das Hinzufügen von Terms, beispielsweise Tags, zu einem Entry per Code. Zunächst wird ein Tag aus der Taxonomie ‚tags‘ abgefragt und dann mit einem Entry verknüpft:

use Statamic\Facades\Entry;
use Statamic\Facades\Term;

$tag = Term::query()->where('taxonomy', 'tags')->where('title', 'Tag A')->first();
$entry = Entry::query()->where('title', 'Testbeitrag')->first();
$tags = $entry->get('tags');
$tags[] = $tag->slug;
$tags = array_values(array_unique($tags));
$entry->set('tags', $tags);
$entry->save();

Dieser Code integriert den neuen Tag in die bestehende Liste von Tags eines Eintrags, ohne doppelte Einträge zuzulassen.

Statamic ermöglicht zudem das Duplizieren von Einträgen. Dabei kannst du einen bestehenden Entry in eine andere Sprache duplizieren, wie hier gezeigt für eine Multisite-Website:

use Statamic\Facades\Entry;

$germanPages = Entry::query()
    ->where("collection", "pages")
    ->where("locale", "de")
    ->get();

foreach ($germanPages as $germanPage) {
    $clone = Entry::make()
        ->collection($germanPage->collection())
        ->locale('en')
        ->origin($germanPage->id())
        ->blueprint($germanPage->blueprint())
        ->slug('en-'.$germanPage->slug())
        ->data($germanPage->data()->all());

    $clone->save();
}

Dieser Code ermöglicht es, alle deutschen Seiten in einer Collection zu erfassen und diese in eine entsprechende englische Version zu kopieren, wobei der Slug angepasst wird.

Ein häufig durchzuführender Schritt kann das Leeren einer ganzen Collection sein. Um die pages Collection zu leeren, kannst du folgende Zeile verwenden:

Collection::findByHandle('pages')->truncate();

Allerdings kann es bei Collections mit Struktur, die Unterseiten enthalten, zu Problemen kommen. Daher ist es ratsam, besonders bei Multisite-Installationen in umgekehrter Reihenfolge zu löschen:

use Statamic\Facades\Collection;

$reverseGermanPages = Collection::findByHandle('pages')->structure()->in('de')->flattenedPages()->reverse();
$reverseGermanPages->each(function ($page) {
    $page->delete();
});

Diese Methode sorgt dafür, dass bei strukturierten Collections die Seiten korrekt und ohne Konfigurationsprobleme der Hierarchie gelöscht werden, indem von unten nach oben gelöscht wird.

Insgesamt bietet Statamic mit seinen Fassaden und Methoden eine leistungsfähige und flexible Programmierumgebung für den Umgang mit Content, die es Entwicklern ermöglicht, schnell auf spezifische Anforderungen und Anpassungen zu reagieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert