Wie man eine Page List mit Concrete5 baut

Eines der am besten dokumentierten CMS aus dem breiten Angebot an Open Source Systemen hört auf den Namen Concrete5. Was den Marktanteil angeht, liegt es noch weit hinter den großen Systemen wie Drupal oder Wordpress zurück, aber der Abstand wird von Mal zu Mal geringer. Tatsächlich bietet es ein sehr angenehmes Interface für Redakteure und Entwickler kleinerer Seiten.

Auch dieses CMS bietet, wie viele andere, eine große Auswahl an veröffentlichten Erweiterungen, die (und hier kommt der Knackpunkt) leider häufig kostenpflichtig sind. So wird der geneigte Programmierer, wenn er nicht gerade über ein großes Budget verfügt, doch bei dem einen oder anderen Feature selbst Hand anlegen müssen. Unlängst durfte ich mich ein wenig näher mit den Page Lists auseinandersetzen.

Dieses schön angedachte Feature ist leider nicht ganz so flexibel, wie man es gerne hätte. Und so kommt man schnell auf den Trichter, dass man doch ein paar Zeilen Code schreiben sollte. Dies geht locker flockig von der Hand und ist Dank der Dokumentation auch kein großes Problem. Ich setze hier einmal ganz frech voraus, dass Ihr schon ein paar Grundkenntnisse in concrete5 habt. Wir wollen eine Liste von bald stattfindenden Vorträgen ausgeben. Allerdings sollen es nur solche sein, die in Zukunft stattfinden werden.

Als erstes laden wir eine Liste von Seiten, diese ist erst einmal noch unbefüllt und unspezifsch. Darum filtern wir diese nach einem bestimmten Seitentyp $ctHandle. Den entsprechenden Handle (in unserem Fall lecture) können wir dem Dashboard entnehmen.

Loader::model('page_list');

$pl = new PageList();
$pl->filterByCollectionTypeHandle('lecture');

Wir wollen allerdings nur solche Vorträge anzeigen, die in der Zukunft stattfinden werden. Darum wenden wir hier noch einen Filter an. Wir haben schlauerweise dem Seitentyp lecture zuvor ein Datumsattribut lecture_date zugewiesen.

$pl->filterByAttribute('lecture_date', time(), '>');

Aber wie es sooft ist, im letzten Moment fällt unserem Auftraggeber ein, dass er die Vorträge noch gerne thematisch filtern würde. Zum Beispiel sollen nur Vorträge zum Thema Drupal angezeigt werden. Wir haben natürlich kein entsprechendes Attribut vorgesehen, die Vorträge sind von der Redaktion bereits alle angelegt. Wir sähen also etwas alt aus, wenn es da nicht concrete5 gäbe. Hier kann man zum Beispiel auch eine Volltextfilterung vornehmen. Der folgende Code durchsucht alle vorhandenen Pages auf einen übergebenen String.

$pl->filterByKeywords('Drupal');

Nun können wir die von uns zusammengebaute Query, denn nichts anderes ist eine Page List, müssen wir nun noch ausführen. Der folgende Befehl gibt uns ein Array mit allen relevanten Vorträgen zurück. Hierbei können wir noch definieren, wieviele Seiten wir abrufen wollen und ab welchem Offset unsere Query starten soll.

$pages = $pl->get($itemsToGet = 100, $offset = 0);

Nun können wir mit einer Schleife über die Seitenliste loopen und alle benötigten Infos ausgeben. Aber wie das funktioniert, erkläre ich ein anderes Mal.

Noch keine Kommentare vorhanden.