Embed Discourse-Kommentare auf einer anderen Website über Javascript

I believe this is possible now. The embed_url property can be set when you first create the topic. Our WordPress plugin does that here: wp-discourse/lib/discourse-publish.php at main · discourse/wp-discourse · GitHub. The embed_url property cannot be updated via the API after the topic has been created.

3 „Gefällt mir“

That’s fantastic! Looks like the API docs need to be updated then!

What would it take to get the property added to the update API method? That would let me solve this properly.

4 „Gefällt mir“

Hallo, ich habe Schwierigkeiten, die Beiträge auf meinem Blog mit Forum-Beiträgen mit dieser Methode zu verknüpfen. Es scheint, dass ich ähnliche Probleme wie einige andere Benutzer hier mit dem iframe content-security-policy habe. Mein Blog wird von Jekyll generiert und von Github gehostet, und mein Discourse wird von Digital Ocean gehostet. Ihre Adressen sind blendertube.com und forum.blendertube.com.

Hier ist der Fehler, der in meinem Browser gemeldet wird:

Weigerte sich, ‘forum.blendertube.com/’ einzurahmen, da ein Vorfahre die folgende Content Security Policy-Direktive verletzt: „frame-ancestors ‘self’ blendertube.com“.

Hat das etwas mit SSL für meine Discourse-Instanz zu tun?

Hier sind einige Screenshots:

Ich hoffe, ihr könnt mir helfen. Danke!

1 „Gefällt mir“

Hier ist ein weiterer Screenshot:

1 „Gefällt mir“

[quote=“eviltrout, post:1, topic:31963”]Auf einem Blog erhält jeder Eintrag normalerweise eine eigene Seite. Um dies zu unterstützen, fügen Sie denselben Ausschnitt auf jeder Seite ein, auf der Sie Kommentare anzeigen möchten, aber ersetzen Sie den an discourseEmbedUrl übergebenen Wert durch die URL der aktuellen Seite. Auf meinem Blog verwende ich den folgenden Wert für discourseEmbedUrl: 'http://eviltrout.com\u003c%= current_page.url %\u003e' – wenn neue Blogseiten erstellt werden, werden automatisch neue Themen für sie auf Discourse erstellt.
[/quote]

Hat jemand eine Idee, wie die Syntax aussehen würde, um „current_page.url“ durch die URL einer WordPress WooCommerce-Produktseite zu ersetzen? Wir möchten dies tun, damit wir den Code nicht für jede Seite anpassen müssen und ihn problemlos auf alle Seiten anwenden können.

Ich habe versucht, unseren eigenen Domainwert für discourseEmbedUrl zu ersetzen: 'http://eviltrout.com\u003c%= current_page.url %\u003e', aber das hat auf WP nicht funktioniert.

1 „Gefällt mir“

Ich denke, was wir hier vielleicht brauchen, ist das neue Tag noindex, indexifembedded

Bearbeiten @codinghorror hielt dies für eine gute Idee, als es für einen ähnlichen Anwendungsfall (das Topic-Embed) aufkam

2 „Gefällt mir“

Ich kann nicht herausfinden, ob/wie das Folgende möglich ist:

Wenn das Standardthema der Discourse-Instanz Dunkel ist, wie kann das eingebettete dann Hell sein?

Wenn meine Browser nicht kaputt sind, sieht es so aus, als ob @codinghorrors Implementierung genau so ist. Wie wird das elegant gemacht? :smiley:

2 „Gefällt mir“

Hinweis, falls sonst noch jemand dies versucht: discourseEmbedUrl funktionierte bei mir nicht, als ich versuchte, Themen direkt in entsprechende Thinkific LMS-Lektionen einzubetten, aber die topicId-Methode funktionierte.

1 „Gefällt mir“

Ich habe diese Funktion zum Einbetten von Discourse-Kommentaren in unseren Blog verwendet. Anfangs hat alles perfekt funktioniert. Kürzlich habe ich festgestellt, dass neuere Blogs (<1 Jahr :rofl:) ein Problem zu haben scheinen, bei dem der Slug nicht wie im diesem Fall erstellt wird, was zu einem falschen Hyperlink führt.

Die Methode zur Slug-Generierung ist auf ASCII eingestellt, und der erlaubte Host ist als www.gyandhan.com festgelegt.

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'https://discussions.gyandhan.com/',
                     discourseEmbedUrl: '<%= request.original_url.split('?').first %>' };

  (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>

Um das Offensichtliche zu wiederholen: Das Problem, das ich bemerke, ist, dass die durch die Einbettung erstellten Themen weder den Slug noch den Titel enthalten. Ich bin mir immer noch nicht sicher, warum dieses Problem auftritt.

1 „Gefällt mir“

Hallo zusammen, entschuldigt, falls das eine dumme Frage ist –

Soweit ich das sehe, erlaubt die eingebettete Erfahrung nur, einige Beiträge in einem Thread zu lesen, aber nicht, mit ihnen auf der Website zu interagieren, richtig? Sie bringt dich zurück zu Discourse, wenn du versuchst, mehr Kommentare zu laden / zu antworten oder auf ein Profil zu klicken.

Gibt es eine Version der eingebetteten Erfahrung, die vollständig auf einer Drittanbieter-Website (nicht auf Discourse) existiert?

Wenn sich meine Website zwischen dunklem und hellem Modus ändert, wie kann ich den eingebetteten Teil benachrichtigen, den Farbmodus zu wechseln?

Ich habe die zulässigen Hosts für Einbettungen wie folgt konfiguriert:


Aber als ich versuchte, eine Klasse für den Body des iframes hinzuzufügen, stellte ich fest, dass iframe.contentDocument null ist, und wenn ich document.getElementById("discourse-embed-frame").contentWindow.document verwende, erhalte ich den folgenden Fehler:
image

Wie kann ich eine bestimmte Zeichenkette auf der Website bereitstellen, die das iFrame für Discourse einbettet, um sie als Titel (oder zumindest für den Slug) für den erstellten Thread zu verwenden? Ich habe Einbettungs-URLs wie example.com/12345 mit Textinhalt, und die Threads verwenden am Ende Wörter aus dem Inhalt, während ich gerne „12345“ hätte.

Liest es nicht das \u003ctitle\u003e-Tag aus dem Dokument?

Das ergibt Sinn. Meine Titel sind zwar ausgefallener als die „12345“, können sich aber im Laufe der Zeit ändern, während die „12345“ stabil bleiben würden. Deshalb würde ich das lieber verwenden.

Ich habe ein wenig getestet: Der Scraper nimmt tatsächlich den <title>text</title>. Wenn man ihn auf <title>12345</title> setzt und ihn für menschliche Clients mit einem <script>document.title = "fancy title";</script> am Ende des HTML-Dokuments überschreibt, funktioniert es gut. Der erstellte Thread verwendet “12345” als Titel und Slug-URL, während Menschen auf der Seite, auf der das Embedding stattfindet, einen schönen Titel sehen.

Danke für den Hinweis!

2 „Gefällt mir“

Hallo zusammen,

Ich würde gerne wissen, ob es möglich ist, Beiträge zu einem beliebigen Thema über einen #Tag abzurufen?
Zum Beispiel haben wir auf der Hauptseite (nicht Discourse) eine Seite, die durch ihren Namen definiert ist, nennen wir sie “Meine Show” (/myshow)

Gleichzeitig gibt es in unserer Discourse-Instanz viele Themen über “Die Show”, sie haben denselben Hashtag #theshow und die Leute können sie nach Staffeln oder Veranstaltungen navigieren.

Die Idee ist, die neuesten Beiträge aus allen Themen mit dem Tag #theshow abrufen zu können. Ist das möglich?

Am nächsten kommen wir dem Abrufen aller Themen, geordnet nach Aktivität unter einem bestimmten Tag. Prüfen Sie Embedding a list of Discourse Topics in another site.

2 „Gefällt mir“

Wie kann man den ersten Beitrag bei eingebetteten Kommentaren wie in Jeffs Blog verhindern?

EDIT: Ich habe arivanandan/discourse-embed-complete: Enthält den ersten Beitrag beim Einbetten von Discourse verwendet :slightly_smiling_face:

Was, wenn ich Kommentare zu mehreren Themen auf einer einzigen Seite einbetten möchte? Wie mache ich das?