Codebeispiele für Statamic Entries

Alle Entries einer Collection abfragen

use Statamic\Facades\Entry;

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

In diesem Beispiel wird die Entry Facade von Statamic verwendet, um alle Einträge (entries) in einer bestimmten Sammlung (collection) abzufragen. Hier werden alle Einträge der Sammlung posts gesucht. Die get() Methode führt die Abfrage aus und gibt die Ergebnisse zurück.

Alle Entries eines Users in einer Collection abfragen

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

$author = User::findByEmail('user@example.com');
 
Entry::query()->where('collection', 'pages')->where('author', $author->id())->get();

In diesem Beispiel werden zuerst die Entry und User Fassaden von Statamic importiert. Dann wird ein spezieller Nutzer (user) über seine E-Mail-Adresse abgefragt. Anschließend wird die Entry::query() Methode verwendet, um alle Einträge (entries) in einer bestimmten Sammlung (collection), in diesem Fall pages, zu finden, die von diesem Nutzer erstellt wurden. Die get() Methode führt die Abfrage aus und gibt die Ergebnisse zurück.

Alle Entries mit einem speziellen Blueprint abfragen

use Statamic\Facades\Entry;

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

In diesem Beispiel wird die Entry Facade verwendet, um alle Einträge (entries) mit einem bestimmten blueprint zu finden. Ein blueprint in Statamic definiert die Datenstruktur eines Inhalts. Hier werden alle Einträge mit dem Blueprint page gesucht. Die get() Methode führt die Abfrage aus und gibt die Ergebnisse zurück.

Term zu einem Entry per Code hinzufügen

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

// Term abfragen
$tag = Term::query()->where('taxonomy', 'tags')->where('title', 'Tag A')->first();

// Entry abfragen
$entry = Entry::query()->where('title', 'Testbeitrag')->first();

// Bisherige Terms abfragen
$tags = $entry->get('tags');

// Gewünschten Term hinzufügen
$tags[] = $tag->slug;

// Duplikate entfernen
$tags = array_values(array_unique($tags));

// Terms setzen
$entry->set('tags', $tags);

// Entry speichern
$entry->save();

In diesem Beispiel wird zuerst ein bestimmter Begriff (term), in diesem Fall ein tag, aus der Taxonomie ‚tags‘ abgefragt. Anschließend wird ein spezieller Eintrag (entry) abgefragt. Dann werden die aktuellen Tags des Eintrags abgerufen. Der neu abgefragte Tag wird zur Liste der aktuellen Tags hinzugefügt. Mit array_values(array_unique($tags)) werden Duplikate entfernt. Anschließend werden die aktualisierten Tags mit set() dem Eintrag zugewiesen. Schließlich wird der Eintrag mit den aktualisierten Tags mit save() gespeichert.

Entry duplizieren

Über nachfolgenden Code kann ein man einen bestehenden Eintrag duplizieren. Dabei ist zu beachten, dass date() nur Collections mit aktiviertem Erscheinungsdatum genutzt werden kann.

$clone = Entry::make()
	->collection($entry->collection())
	->locale($entry->locale())
	->slug($entry->slug()) // muss angepasst werden.
	->date($entry->date())
	->data($entry->data()->all());

$clone->save()

Alle Entries einer Collection in eine andere Sprache duplizieren

Folgender Code ist für eine Multisite-Website ausgelegt. Zunächst werden alle deutschen Seiten abgefragt, anschließend wird über diese Seiten iteriert und jede dieser Seiten wird geklont. Der Slug jeder Seite wird um den Prefix ‚en-‚ erweitert, außerdem wird die deutsche Version der Seite als Origin bei der englischen Version gesetzt:

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($entry->id)
        ->blueprint($germanPage->blueprint())
        ->slug('en-'.$germanPage->slug())
        ->data($germanPage->data()->all());

    $clone->save();
}

Eine komplette Collection leeren

Um eine komplette Collection zu leeren, kann man folgende Codezeile nutzen. In diesem Beispiel wird die Collection pages geleert:

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

Vorsichtig muss man sein, sofern die Collection über eine Struktur verfügt und somit Seiten auch Unterseiten enthalten können. Die oben genannte Codezeile würde eine Seite nach der anderen löschen, weshalb zunächst die Home-Seite verschwinden würde. Die nächste Seite wird damit automatisch zur Home-Seite. Sollte dadurch eine Seite mit einer Unterseite zur Home-Seite werden, bricht der Lösch-Vorgang ab, da die Home-Seite keine Unterseiten haben darf. In diesem Fall muss auf einen anderen Code zurückgegriffen werden, der in diesem Fall alle deutschen Seiten einer Multisite löscht:

use Statamic\Facades\Collection;

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

Dabei wird zunächst die Seitenstruktur abgefragt und dann umgedreht. Sprich – die Seiten werden anschließend in umgekehrter Reihenfolge (von unten nach oben) gelöscht. Dadurch kann das oben beschriebene Problem der Home-Seite mit Unterseiten nicht entstehen.

Schreibe einen Kommentar

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