Podlove-Templates mit Twig (3): Related Episodes

Heute gehen wir etwas mehr in die Tiefe und hübschen unsere Shownotes auf. Dabei brauchen wir das Podlove-Module „Ähnliche Episoden“ . Wie Du es aktivierst und was Du dort sinnvollerweise einträgst, erkläre ich in der Podlove-Artikelreihe. Wie immer bei den Podlove-Templates gilt auch hier: Das Ergebnis ist nur so gut, wie das was Du vorher in Podlove eingetragen hast. Wir können zwar mit den Template-Tags auf jeden einzelnen Datenpunkt in unserem Podcastprojekt zugreifen, wenn da aber keine Daten hinterlegt sind, passiert halt nichts. (Und dann wundert man sich stundenlang, wieso eine eigentlich richtige Template-Programmierung doch nicht funktioniert, das weiß ich zufällig.)

Ähnliche Episoden

Wenn Du gerade dabei bist, eine neue Episode Deines Podcasts zu veröffentlichen, dann gibt Dir Podlove die Möglichkeit eine oder mehrere bereits angelegte Episoden als ähnlich zu definieren und zu verknüpfen. Dabei kannst Du sowohl bereits veröffentlichte Episoden nutzen, als auch solche, die in WordPress schon existieren, die aber noch nicht veröffentlicht sind. Letztere tauchen erst dann in der Liste auf, wenn sie veröffentlicht werden. Ein Beispiel:

So sieht die ganze Kiste aus, wenn Du Episoden verknüpfen möchtest. Drei sind schon verknüpft, eine vierte ist ausgewählt. Mit dem richtigen Template im Hintergrund können wir dafür sorgen, dass die Liste dieser Episoden im B log ungefähr so aussieht:

Im Blog von Jörn Schaars feinem Podcast habe ich die Liste der ähnlichen Episoden zusammen mit den Lizenzangaben in ein Template gepackt, das automatisch am Ende jeder Episode eingefügt wird. (Mehr dazu in einem eigenen Artikel in der Podlove-Reihe!) Aber was steht denn nun drin?

Das Template

Templateseitig besteht das ganze wieder aus einer for-Schleife zusammen mit einer if-Abfrage. Die Podlove-Macher haben uns mit episode.relatedEpisodes etwas zum einhaken gegeben. Um es im Template übersichtlicher zu gestalten, setzen wir eine Variable ein:

{% set related_episodes = episode.relatedEpisodes %}

Als nächstes fragen wir schrittweise alle Episoden ab, die in der Variable related_episodes gespeichert sind und geben die in einer Liste aus:

<ul>
{% for related_episode in related_episodes %}
    <li>
        <a href="{{ related_episode.url }}">{{ related_episode.title }}</a>
    </li>
{% endfor %}
</ul>

Geben wir dem ganzen noch eine Überschrift:

<h3>Ähnliche Episoden:</h3>

<ul>
{% for related_episode in related_episodes %}
    <li>
        <a href="{{ related_episode.url }}">{{ related_episode.title }}</a>
    </li>
{% endfor %}
</ul>

Was jetzt passiert, ist dass unter jeder Episode die Überschrift „Ähnliche Episoden“ erscheint, auch wenn da gar keine ähnlichen Episoden sind. Dieses Problem bekommen wir mit einer einfachen if-Abfrage in den Griff:

{% if related_episodes %}

Stellt im Prinzip die Frage: „Existieren related_episodes zu dieser?“ und wenn die Frage mit „ja“ beantwortet werden kann, sprich wenn in der Variable ein Wert eingetragen ist, dann wird unsere for-Schleife ausgegeben. Das ganze Template sieht so aus:

{% set related_episodes = episode.relatedEpisodes %}
{% if related_episodes %}
<h3>Ähnliche Episoden:</h3>

<ul>
{% for related_episode in related_episodes %}
    <li>
        <a href="{{ related_episode.url }}">{{ related_episode.title }}</a>
    </li>
{% endfor %}
</ul>
{% endif %}

In Teil 4 dieser Reihe zeige ich Dir, wie Du Mitwirkende Deines Podcasts schick verlinken kannst und was es da noch für Möglichkeiten mit ähnlichen Episoden gibt.

Alle Lektionen in dieser Reihe:

2 Kommentare

  1. Hallo Jörn,
    gibt es eigentlich eine Funktion um die reihenfolge bei der Anzeige der Epsioden zu ändern? Egal in welcher Reihenfolge ich sie auswähle, sie werden immer von alt nach jung sortiert. Lieber wäre es mir andersherum. Danke für Deine tolle Hilfe!

    1. Das müsste eigentlich ganz einfach gehen, indem zu {(sort:DESC)} in die for-Schleife einbaust. Das habe ich noch nicht ausprobiert und es ist auch nicht dokumentiert, aber {% for related_episode in related_episodes{(sort:DESC)} %} sollte sie von jung nach alt sortieren. Wenn das nicht funktioniert, probiere mal ASC. Sag gern hier bescheid, ob es geklappt hat.

Kommentar hinterlassen

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