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.
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.
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.
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.
Ü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()
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();
}
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.