Podlove-Templates mit Twig (4): Moderation und Gäste schick anzeigen

Seit einigen Monaten hat Apple in seinem Podcastverzeichnis (ehemals iTunes genannt) die Kategorien geschärft und im Zuge dessen auch gleich angekündigt, dass Contributoren (zu deutsch Beitragende) eines Podcasts in Zukunft wichtiger für das Ranking werden. Heißt einerseits, dass wir in unserem Podlove-Plugin Contributoren anlegen und sie zweitens pflegen müssen. Die Infos in dieser Lektion funktionieren nur, wenn Du das Contrubitor-Modul aktiviert, bereits Contributoren anlegt und in mindestens einer Episode verlinkt hast und setzt entsprechend viel voraus. Wenn Du Dir mit den Angaben zu Contributoren, deren Gruppen und Rollen unsicher bist, lies bitte zuerst den entsprechenden Artikel im Podlove-Tutorial: „Podlove Publisher Plugin für WordPress (7): Contributoren

Die Podlovemacher haben ja zu einigen Modulen von Podlove Shortcodes angelegt, die Du zum Beispiel mit [podlove-episode-contributor-list avatars="no" role="guest"] aufrufen kannst. Dieser Shortcode erzeugt eine Tabelle mit allen öffentlich verfügbaren Contributoren, denen die Rolle „Gast“ zugewiesen wurde. Ihre Profilfotos sollen dabei nicht angezeigt werden. Ich bin mit meinen Twig-Fähigkeiten selbst noch nicht so weit, dass ich die Funktion dieses Shortcodes nachbauen könnte. Das heißt aber nicht, dass wir damit nicht allerlei Spaß haben können. Ich nehme hier mal den Code vom Camping Caravan Podcast, weil wir da gelegentlich Gäste haben, die uns von ihren Reisen und/oder Projekten erzählen. Das geht erstmal ganz simpel damit los, dass wir die Stammbesatzung der Episode anzeigen lassen und eine Überschrift dazu schreiben:

<h3>Moderation:</h3>
[podlove-episode-contributor-list role="stammbesatzung"]

Alles noch kein Hexenwerk, damit fangen wir jetzt an. Als erstes gucken wir mal, ob in dieser Episode überhaupt Gäste dabei waren:

{% if episode.contributors({group:"guests"})|length > 0 %}

Wenn null Gäste dabei waren, passiert an dieser Stelle nichts weiter, die Schleife wird abgebrochen. Aber wenn mehr als null Gäste dabei waren, machen wir weiter mit dem nächsten Schritt und setzen erstmal eine Variable:

{% set episodename = episode.title %}

Die brauchen wir für später. Was folgt ist im Prinzip die gleiche Tabelle wie bei der Stammbesatzung, nur dass wir diesmal ausschließlich die Gäste anzeigen lassen. Danach können wir die if-Schleife zunächst abschließen:

<h3>Zu Gast:</h3>
[podlove-episode-contributor-list role="guests"]
{% endif %}

Und jetzt kommt der lustige Teil. Wir wollen jetzt unter der Gäste-Tabelle anzeigen lassen, in welchen Episoden jeder Gast ggf. noch dabei war. Dazu brauchen wir eine for-Schleife und die Variable episodenname von vorhin. Für jeden Gast dieser Episode soll nun folgendes geschehen:

{% for contributor in episode.contributors({group:"guests"}) %}
{% set anzahl = contributor.episodes|length - 1 %}

Wir setzen eine neue Variable anzahl auf den Wert „Anzahl der Episoden mit diesem Gast minus eins“ und gehen dann in eine if-Abfrage. Wenn die Anzahl genau 1 ist, der Gast also nur einer anderen Episode dabei war, soll die Überschrift im Singular ausgegeben werden:

    {% if anzahl == 1 %} 
        <h3>Die andere Episode mit {{ contributor.name }}:</h3>

Jetzt kommt uns die Variable episodenname von vorhin zu pass: Es würde ziemlich dusselig aussehen, wenn jetzt die aktuelle Episode auch in der Liste der Episoden mit diesem Gast auftauchen würde. Deswegen bedienen wir uns jetzt einer weiteren if-Abfrage:

<ul>  
  {% for episode in contributor.episodes %}
    {% if episode.title != episodename %}
      <li><a href="{{ episode.url }}">{{ episode.title }}</a></li>
    {% endif %}
  {% endfor %}
</ul>
{% endif %}

Dank {% if episode.title != episodename %} können wir nur die andere Episode in die Liste schreiben lassen, in der unser Gast noch dabei war. Das gleiche machen wir auch noch mal mit einer Überschrift im Plural:

    {% if anzahl >1 %} 
        <h3>Weitere Episoden mit {{ contributor.name }}:</h3>
        <ul>
        {% for episode in contributor.episodes %}
            {% if episode.title != episodename %}
                <li><a href="{{ episode.url }}">{{ episode.title }}</a></li>
            {% endif %}
        {% endfor %}
        </ul>
    {% endif %}

Und der ganze Code sieht dann so aus:

<h3>Moderation:</h3>
[podlove-episode-contributor-list role="stammbesatzung"]
{% if episode.contributors({group:"guests"})|length > 0 %}
    {% set episodename = episode.title %} {# Variable setzen für später #}
    <h3>Zu Gast:</h3>
    [podlove-episode-contributor-list role="guests"]
{% endif %}
{% for contributor in episode.contributors({group:"guests"}) %}
{% set anzahl = contributor.episodes|length - 1 %} {# Die Anzahl der Episoden mit diesem Gast ermitteln und um die aktuelle Episode reduzieren #}
    {% if anzahl == 1 %} {# Wenn es genau 1 Episode ist, Überschrift im Singular ausgeben #}
        <h3>Die andere Episode mit {{ contributor.name }}:</h3>
        <ul>
        {% for episode in contributor.episodes %} {# alle Episoden mit diesem Gast durchgehen #}
            {% if episode.title != episodename %} {# alle außer der aktuellen Episode auflisten #}
                <li><a href="{{ episode.url }}">{{ episode.title }}</a></li>
            {% endif %}
        {% endfor %}
        </ul>
    {% endif %}

    {% if anzahl >1 %} {# War der Gast in mehr Episoden als der aktuellen + 1 zu Gäst, Überschrift in der Mehrzahl ausgeben, ansonsten weitermachen wie oben #}
        <h3>Weitere Episoden mit {{ contributor.name }}:</h3>
        <ul>
        {% for episode in contributor.episodes %}
            {% if episode.title != episodename %}
                <li><a href="{{ episode.url }}">{{ episode.title }}</a></li>
            {% endif %}
        {% endfor %}
        </ul>
    {% endif %}
{% endfor %}
<p style="margin-bottom:50px"> </p>

Das Ergebnis siehst Du hier als Screenshot sowohl im Singular als auch im Plural:

Sven war bisher nur in einer Episode zu Gast.
David hat den Camping Caravan Podcast schon mehrmals als Gast bereichert.

In der nächsten Lektion bauen wir uns ein schickes Episodenarchiv.

Alle Lektionen in dieser Reihe:

3 Kommentare

  1. Angelehnt an die Nomenklatura der Podcast-2.0-Bewegung müssten die Rollen entsprechend so heißen (wahrscheinlich wir die Formatierung durch den Textblock hier komplett zerhauen, aber ich hab’s zumindest versucht 🙂

    Moderation: [podlove-episode-contributor-list role=“host“] {% if episode.contributors({role:“guest“})|length > 0 %} {% set episodename = episode.title %} {# Variable setzen für später #} Zu Gast: [podlove-episode-contributor-list role=“guest“] {% endif %} {% for contributor in episode.contributors({role:“guest“}) %} {% set anzahl = contributor.episodes|length – 1 %} {# Die Anzahl der Episoden mit diesem Gast ermitteln und um die aktuelle Episode reduzieren #} {# % if anzahl == 1 %} {# Wenn es genau 1 Episode ist, Überschrift im Singular ausgeben #} {% if true %} {# Wenn es genau 1 Episode ist, Überschrift im Singular ausgeben #} Die andere Episode mit {{ contributor.name }}: {% for episode in contributor.episodes %} {# alle Episoden mit diesem Gast durchgehen #} {# % if episode.title != episodename %} {# alle außer der aktuellen Episode auflisten #} {% if true %} {# alle außer der aktuellen Episode auflisten #} {{ episode.title }} {% endif %} {% endfor %} {% endif %} {% if anzahl >1 %} {# War der Gast in mehr Episoden als der aktuellen + 1 zu Gäst, Überschrift in der Mehrzahl ausgeben, ansonsten weitermachen wie oben #} Weitere Episoden mit {{ contributor.name }}: {% for episode in contributor.episodes %} {% if episode.title != episodename %} {{ episode.title }} {% endif %} {% endfor %} {% endif %} {% endfor %}

  2. und noch einmal sorry, wenn ich nerve: in meinem Codebeispiel sind noch if-Zeilen per „true“ übersprungen, die natürlich im eigentlichen Code nicht übersprungen werden sollen. Ich wollte nur mal das mit den Gästen und den weiteren Episoden testen, obwohl ich nur eine Episode online habe. Aber den Code kann man eh nicht so 1:1 übernehmen, weil der ganze HTML-Krams fehlt. Der Grundgedanke bleibt: wenn man sich an dieses Rollen- und Gruppen-Schema aus dem Github Repo orientiert (wie es laut Update ja auch die Empfehlung ist), dann kann der Code auch entsprechend angepasst werden und würde global(er) bei anderen Podcast-Instanzen genau so ohne Anpassung funktionieren.

  3. Stimmt alles. Diese Reihe dokumentiert ja meinen Lernfortschritt in Sachen Twig. Inzwischen habe ich in allen Blogs die Bezeichnungen der Podcast Taxonomy in Verwendung. Übersichtlicher wäre übrigens gewesen, wenn du geschrieben hättest, dass man „stammbesetzung“ durch „host“ und „gast“ durch „guest“ ersetzen sollte. 😀 Wobei Podlove so clever ist, dass es „Gast“ erkennt und im Feed durch „guest“ ersetzt.

Schreibe einen Kommentar zu Jörn Antworten abbrechen

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