Einbindung Discourse in Episoden als Kommentarfunktion


#1

Guten Morgen,

bei meinem ersten Podcastprojekt landnerdschaft (www.landnerdschaft.com) nutze ich auf Anraten des Entwicklers firtz und bin auch sehr froh drum. Davor zog ich mich wie Gummi, podlove installieren zu müssen, nicht wegen podlove sondern wegen Wordpress… Wordpress installieren und aktuell zu halten ist etwas, wofür mich meine Kunden bezahl(t)en und ich sah die Entlohnung stets als Schmerzensgeld an.

Nicht viel anders geht es mir bei der Programmierung in PHP; Kann ich zwar und war früher Teil meines Broterwerbs, bin aber froh, heute andere Plattformen zu nutzen. Nichtsdestotrotz fummelte ich ein wenig in der firtz index.php rum, um eine episodenbasierte Kommentarfunktion für meinen Podcast zu ermöglichen.

Da ich bereits länger (durch dieses Forum kennengelernt) mehrere Discourse Installationen betreibe, wollte ich die “embedding” Möglichkeiten der Discourse Plattform verwenden, die sich auch an anderen Stellen bereits bewährten. (https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963)

Hier eine Auflistung, was ich tat, Screenshots des Ergebnisses sowie Wünsche für die Zukumpft™.

index.php:

39: $main->set('itemattr', array('title', 'description', 'link', 'guid', 'article', 'payment', 'chapters', 'enclosure', 'duration', 'keywords', 'image', 'date', 'noaudio', 'location', 'comments'));

das Attribut “comments” hinzugefügt.

templates/default/site.html:

(nach <!--//episode downloads-->)

                                <!--Komentare-->
                                <check if="{{(trim(@item.comments)!='')}}">
                                    <check if="{{count(@items)==1}}">
								        {{@item.comments | raw}}
    								</check>
    								<check if="{{count(@items)>1}}">
	    							    <h3>Kommentare / Diskussion:</h3>
	    							    <a href="<check if="{{@singlepage==false}}">{{@BASEURL}}{{@feedattr.slug}}/show/{{@item.slug}}</check>" title="{{@item.slug}}" name="{{@item.slug}}">Zum Kommentieren die Episode aufrufen: "{{@item.title}}"</a>
    								</check>
								</check>
								<!--//Kommentare-->

004.epi

(die jeweiligen Episoden Files)


comments:
<h3>Kommentare / Diskussion:</h3>
<div id='discourse-comments'></div>
<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'https://f.z6c.de/',
                     topicId: 547 };
  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

screenshot1125

Auf den Übersichtsseiten wird jeweils nur der Link zur Episode unter Kommentare geposted, da das JavaScript von Discourse regulär nach einem div mit der id discourse-comments sucht und dieses durch die Kommentare ersetzt. Hätte ich in der Übersicht mehrere solcher divs, würde nur das erste durch die Kommentare aller aufgelisteten Episoden ersetzt. Um dies zu ändern müsste ich die Discourse Installation anpacken und mich nach jedem Update erneut drum kümmern. Sollte jemand einen eleganteren Weg finden ohne die Discourse Installation anzufassen, freue ich mich sehr über Feedback.

Befindet man sich auf einer Einzelseite zu einer Episode, wird der Thread aus dem Discourse Forum eingebunden.

screenshot1126

Derzeit vergebe ich die IDs für die Forenthreads noch manuell, indem ich in meinem Forum einen neuen thread pro Folge anlege und dessen ID dann dem embedd Code mitgebe. Discourse bietet wohl auch an, die Threads automatisiert zu generieren, derzeit ist es für mich aber nicht mehr Arbeit, einmal pro Woche nen Thread anzulegen und die Nummer zu übernehmen, als mich in die Sache einzulesen. Durchklicken und testen muss ich es eh, wenn es angelegt ist, dann kann ich vorab auch die drei Klicks selbst durchführen.

Vielleicht wird der Eine oder Andere mit diesem Workaround etwas anfangen können, sollte es in firtz Einzug finden freue ich mich natürlich auch.


#2

Die versprochenen Wünsche für die Zukumpft™:

  • Integration in firtz
  • Integration in die feed.cfg
  • integration in die template.cfg
  • Realisierung der Mehrfachintegration pro Seite (was dann im Discourseprojekt zu erledigen wäre durch Anpassung des javascript Codes, beispielsweise durch hinzufügen einer “target-div:” variable)
  • Vereinfachung der Einbindung entweder durch “comments = yes” und den Rest machen firtz und Discourse unter sich aus
    • oder: Vereinfachung durch parsen lediglich der Variable “comments-id: 572” und den Rest macht Firtz dann selbst

Ich weiss also grob, was ich will und grundsätzlich was dafür zu tun ist, traue mir aber nicht zu, Euch (firtz) Euer Repository mit geknauptem PHP Code zuzumüllen. So wie es jetzt umgesetzt ist funktioniert es für mich generell, die zwei Änderungen sind für mich auch nach einem firtz update in zwei Minuten erledigt, soweit so gut. Sollte sich dennoch jemand bereit erklaeren, dies in firtz “richtig” einzubauen werdet ihr von mir ein dickes Lob bekommen :wink:


#3

Um dafür zu sorgen, dass wenigstens die erste/oberste Folge die jeweils angezeigt wird auch auf der Startseite bereits die Kommentarfunktion direkt einbindet, ändert man die site.html wie folgt:
(Man fügt die Variable @ctr als itemcounter ein und gibt bei @ctr==1 die comments Variable aus, sonst nicht. Immer noch Knaup, aber besser als vorher)

Bereich Loop: Episodes

<?php
					/**
					 *	Home: Loop: Episodes
					 */ 
					?>	
					<repeat group="@items" value="{{@item}}" counter="@ctr">

Bereich Kommentare:

<!--Komentare-->
                                <check if="{{(trim(@item.comments)!='')}}">
                                    <check if="{{ @ctr==1}}">
								        {{@item.comments | raw}}
    								</check>
    								<check if="{{count(@items)>1}}">
	    							    <h3>Kommentare / Diskussion:</h3>
	    							    <a href="<check if="{{@singlepage==false}}">{{@BASEURL}}{{@feedattr.slug}}/show/{{@item.slug}}</check>" title="{{@item.slug}}" name="{{@item.slug}}">Zum Kommentieren die Episode aufrufen: "{{@item.title}}"</a>
    								</check>
								</check>
								<!--//Kommentare-->