Autorenseiten unter Kirby erstellen

Bei der Neuentwicklung des Blogs stand ich vor unter anderem vor der Aufgabe, für jeden Autor unseres Blogs ein eigenes Profil zu erstellen. Wie du das mit Kirby am Besten anstellst, erkläre ich dir in diesem Beitrag.

Bis zur Kirby-Version 2.1 war das Ganze eigentlich relativ einfach anzustellen, allerdings nicht sehr schön: Die Autoren hatten neben ihrem normalen Benutzerprofil auch noch eine eigene Seite, so wie man jede andere Seite auch erstellen kann. Ist zwar blöd, weil so eine Person zwei Seiten pflegen muss, aber es ging bis damals nicht anders.

Die Zuordnung der Autoren zum Artikel lief dabei übrigens über den Benutzernamen (welcher bei den Blueprints als Feldmöglichkeit gegeben ist), Namen von Benutzerprofil und Autorenprofil mussten dabei übereinstimmen, sodass die Autorenfelder (Kurzbeschreibung, Bild, Social-Media-Links, ...) unter den Artikeln augegeben werden konnte.

Seit der Kirby-Version 2.2 kann man allerdings auch in den regulären Benutzerprofilen weitere Felder hinzufügen und im Template ausgeben lassen. Somit war eine weitere Seite für die Autoren nicht mehr nötig, alle Infos konnten nun in den Benutzerprofilen eingegeben werden.

Die ganzen Profildaten werden nun im Benutzerprofil angegeben, inkl. Biografie und auch die native Profilbildfunktion von Kirby kann nun genutzt werden. Jeder Benutzer kann beim Klick auf seinen Namen nun das eigene Profil direkt erreichen und bearbeiten.

Darauf aufbauend eine allgemeine Autorenseite mit allen Beteiligten in der Übersicht zu entwerfen war nicht schwierig, einfach über alle Benutzer durchiterieren und diese dann ausgeben lassen. Auch beim kleinen Autorenprofil musste ich nur wenig ändern, um diese auf die neuen Benutzerprofile umzuschreiben.

Problematisch wurde es aber bei den "großen" Einzelprofilen, die eine eigene Unterseite haben sollten und neben der Biografie und allen Social Media Links auch eine Liste mit allen veröffentlichten Artikeln enthalten sollte. Zu sehen gibt es die immer, wenn man auf den Namen in den kleinen Profilen geht. Oder einfach über diesen Link hier.

Das Problem hierbei: Da die Benutzerprofile keine Seiten im eigentlichen Sinne sind, also nicht im Content-Ordner liegen, lassen diese sich nicht so einfach ausgeben. Die Autoren sollten allerdings von der Struktur her eine Ebene unter der normalen Autorenseite liegen.

Dank dem hilfsbereiten Kirby-Forum fand sich allerdings recht schnell eine Lösung, die auf der Routing-Engine aufbaut. Da ich sicherlich nicht der Einzige mit diesem Problem bin, möchte ich es nicht für mich behalten.

Nötig ist dafür eigentlich nur ein eigenes Autoren-Template, welches dann für die Ausgabe der Userdaten verwendet wird. Hier ist dir natürlich freie Hand gelassen, in meinem Fall gebe ich hier ein ausführliches Autorenprofil sowie eine Liste der geschriebenen Artikel aus.

Um die Lösung zu verwenden, muss eigentlich in der site/config/config.php nur folgendes Routing eingefügt werden:

c::set('routes', array(
    array(
        'pattern' => 'ueber-uns/autoren/(:any)',
        'action'  => function($user) {
            $site = kirby()->site();
            $pages = $site->pages();
            $page = $site->find('ueber-uns/autoren');
            tpl::load(kirby()->roots()->templates() . DS . 'author.php', array('user' => $user, 'site' => $site, 'pages' => $pages, "page" => $page), false);
        }
    )
));

Falls schon eine bestehende Route verwendet wird, musst du natürlich den c::set('routes', array());-Teil nicht erneut hinzufügen sondern die neue Route ins Array mit aufnehmen.

Außerdem musst du wahrscheinlich noch das Matching-Pattern ändern, sodass es auf deine Struktur passt. Als allerletztes musst du noch, falls du dein Autoren-Template nicht author.php genannt hast, dies entsprechend ändern.

Was macht diese Route genau? Letztendlich wird nur das, was in der URL auf das (:any) gematcht wird, an das Template authors.php weitergegeben und dann ausgegeben. Dem Template wird auch noch $site und $pages mitgegeben, damit du auch auf die ganzen Artikel und Bilder zugreifen kannst.

Zweiter Schritt: In dem Authors-Template müssen am Anfang noch zwei Zeilen hinzugefügt werden, damit die übergebenen Variablen auch genutzt werden können:

snippet('header', array('site' => $site, 'page' => $page));
$autor = $site->users()->find($user);

Die erste Zeile sorgt nicht nur dafür, dass das Header-Snippet eingebunden wird (natürlich ist auch jedes andere möglich), sondern auch, dass $site $page verfügbar sind. In der zweiten wird dann der Einfachheit halber der übergebene Nutzer in $autor gespeichert. Nun können problemlos die Userprofilinfos ausgegeben werden. Den Vornamen bekommst du zum Beispiel mit $autor->firstname().

Damit steht nun automatisch generierten Nutzerprofilen nichts mehr im Wege. Falls es noch Fragen gibt: Ab damit in die Kommentare!

Facebook Twitter Google+ WhatsApp

von Florian Schmidt

Gründer von Netzleben. Studiert IT System Engineering am Hasso-Plattner-Institut in Potsdam. Kauft viel zu viel Technik online ein. Liebt Kekse.

Hinterlasse einen Kommentar

Kommentare

Nico (nokes.de)

Danke für das Beispiel. Genau danach habe ich gerade für meine Nischenseite gesucht.

Hierauf antworten