Die Hunderte Male, die ich auf dieser CSS-Seite war, und nie das CSS für Einbettungen bemerkt…

Die Hunderte Male, die ich auf dieser CSS-Seite war, und nie das CSS für Einbettungen bemerkt…

Ich habe heute versucht, dies zu implementieren, aber es gibt einige Probleme für mich:
Die größte Überraschung war zu erfahren, dass jedes Mal, wenn Sie eine URL mit einem Embed besuchen, ein neuer Thread erstellt wird. Das steht im OP:
Die einzige Lösung, die mir einfällt, ist hacky und verlässt sich auf kurzfristiges SSR/Caching, um den Embed-Endpunkt anzupingen:
Daher denke ich, dass die Logik wäre:
Überprüfen Sie $discourse/embed/info?embed_url=$link.
Wenn der Thread existiert, zeigen Sie das Embed wie gewohnt an.
Wenn nicht, zeigen Sie eine Schaltfläche „Konversation starten“ an, die zu $discourse/new-topic?subject=$link verlinkt.
Würde das funktionieren oder muss eine andere Verknüpfung stattfinden?
Ein neues Thema wird nur erstellt, wenn eine Seite mit dem Embed zum ersten Mal besucht wird. Bei nachfolgenden Besuchen wird das vorhandene Thema, das mit der URL verknüpft ist, gerendert.
Wenn Sie die automatische Themen-Erstellung nicht wünschen, können Sie die Themen über API-Aufrufe erstellen, wie es Ihnen am besten passt, und dann die topicID an das Embed übergeben, um die Zuordnung manuell zu steuern.
Verstanden, das ist für meinen Fall brutal, da es Zehntausende von Seiten gibt
So wie hier?
…das hat auch einige Probleme, wie z.B. Button-Klicks ohne anschließende Interaktion.
Gibt es eine Möglichkeit, das Thema erst zu erstellen, wenn ein Benutzer tatsächlich kommentiert hat, so etwas wie hier?:
$discourse/new-topic?subject=$link.
oder ist hier das Problem, dass wir keine topicID für eine deterministische Kopplung übergeben können?
Nein, es ist nicht möglich, auf ein Thema zu antworten, das in Discourse nicht existiert.
Um diesem Bedarf gerecht zu werden, haben wir es möglich gemacht, alle eingebetteten Themen als nicht aufgelistete Themen zu erstellen, die automatisch aufgelistet werden, wenn jemand zum ersten Mal antwortet.
Ich denke, das Erstellen des Themas erfordert eine authentifizierte Anfrage, die auf dem Server ausgeführt wird. Wenn Sie sich damit nicht befassen möchten, wäre ein anderer Ansatz, der Benutzeroberfläche einen Button hinzuzufügen, der Code ähnlich diesem auslöst (der Code, der sonst automatisch in den Head-Bereich der Seite eingefügt würde): discourse/public/javascripts/embed.js at 581dbca97f2b55c9bbbe40dc3b58a9df7409d77f · discourse/discourse · GitHub. Es wird lediglich ein iframe-Element mit diesen Daten erstellt:
<div id='discourse-comments'></div>
<meta name='discourse-username' content='DISCOURSE_USERNAME'>
<script type="text/javascript">
DiscourseEmbed = {
discourseUrl: 'http://127.0.0.1:4200/',
discourseEmbedUrl: 'EMBED_URL',
// className: 'CLASS_NAME',
};
</script>
Bearbeitung: Ich musste es ausprobieren. Dies ist nur ein Proof of Concept: discourse-embed-iframe-test/app/routes/triggering-embed-code.tsx at main · scossar/discourse-embed-iframe-test · GitHub. Ich glaube nicht, dass es eine gute Lösung für Ihr Problem ist.
Die Logik liegt vollständig auf der Client-Seite (die Loader-Funktion dient nur der Bequemlichkeit). Leider gibt es keine gute Möglichkeit für den Client, festzustellen, ob das Thema in Discourse existiert. Daher ist es nicht möglich, die Benutzeroberfläche anzupassen, je nachdem, ob das Thema bereits existiert oder nicht. Es gibt Möglichkeiten, dies zu lösen, aber es würde wahrscheinlich erfordern, etwas in die Datenbank der App zu schreiben.
Discourse verwendet Window: postMessage(), um Daten vom iframe an das übergeordnete Dokument zu übergeben. Zum Beispiel, wenn auf einen Antwortlink in den eingebetteten Kommentaren geklickt wird: discourse/app/assets/javascripts/discourse/scripts/embed-application.js at 581dbca97f2b55c9bbbe40dc3b58a9df7409d77f · discourse/discourse · GitHub. Ich frage mich, ob eine Nachricht an das übergeordnete Dokument gesendet werden könnte, um anzuzeigen, dass ein Thema erstellt wurde. Dies würde es Websites ermöglichen, Dinge wie benutzerdefinierte Lade-Spinner einzustellen oder eine andere Benutzeroberfläche anzuzeigen, je nachdem, ob das Thema bereit ist, Kommentare zu empfangen.
Ich glaube nicht, dass das der Fall sein muss, wenn es möglich wäre, einem neuen Beitrag einen primären Link zuzuweisen:
$discourse/new-topic-link?link=$link
Dies würde vermutlich zum Thread weiterleiten, wenn er bereits existiert, und die vorhandene Logik im Embed-Admin verwenden. Vielleicht mit Vorlagen?
Ich schätze, ein anderer Weg, dies zu lösen, wäre, nach Beiträgen zu suchen, die sich auf den betreffenden Link beziehen, und alle Treffer als Teil einer site-weiten Konversation anzuzeigen, die direkt auf der Seite über SSR gerendert wird. Dies wäre möglicherweise gleichwertig, da die Embeds sowieso nur Ansichten sind. Das offensichtlichste Problem wäre die Auswahl des Threads, zu dem der Benutzer gesendet werden soll, wenn er teilnehmen möchte.
Bearbeitung: Wenn ich herausfinden kann, wie man Beiträge nach Link-Inhalt durchsucht
Ich frage mich, ob diese Funktion verwendet werden kann, um ein Discourse-Forum anzugreifen. Insbesondere ist es möglich, dass jemand Besuche von Seiten unter mehreren URLs eines Hosts fälscht und viele Themen erstellt?
Hallo Discourse-Community!
Ich freue mich, ein Plugin vorstellen zu können, das ich für diejenigen entwickelt habe, die Docusaurus v3 verwenden und Discourse-Kommentare auf ihren Websites einbetten möchten.
Dieses Plugin erleichtert die Integration von Discourse-Kommentaren in Ihre Docusaurus v3-Website. Hier sind einige Hauptmerkmale:
Wenn Sie Docusaurus v3 verwenden und Discourse-Kommentare zu Ihrer Dokumentation oder Ihren Blogbeiträgen hinzufügen möchten, vereinfacht dieses Plugin den Prozess erheblich.
Sie finden das Plugin auf npm: docusaurus-plugin-discourse-comments
Nehmen wir an, ich habe einen einzelnen einbettbaren Host, blog.example.com, und eine Wildcard-Pfad-Zulassungsliste wie /.*.
Ich möchte eine zusätzliche Einbettung mit demselben Host hinzufügen, aber diesmal mit einer anderen Zulassungsliste, z. B. /new-release.*, und mit einem zusätzlichen Tag, sagen wir releases.
Offensichtlich könnte das Thema “neue Version” sowohl zu den Host-/Pfadkombinationen passen, aber welche der beiden hätte Vorrang? In welcher Reihenfolge werden die Regeln ausgewertet?
Ist es immer noch so, dass wir ein Thema aus einem privaten Forum nicht auf einem separaten Host einbetten können? Mein Anwendungsfall ist, dass wir Kajabi für das Hosting des Produkts nutzen und Discourse als unsere Kommentarplattform verwenden. Jedes erfordert separate Logins, daher vermute ich, dass die Antwort immer noch „nicht möglich“ lautet, aber dies ist einer der einschränkenden Faktoren für unsere Benutzer und ein großes Problem, da wir über 750 Module haben, jedes mit einem eigenen Diskussionsbereich. Wenn ich das Discourse-Thema für jedes Kajabi-Modul auf derselben Seite einbetten könnte, selbst ohne die Möglichkeit, auf der Seite zu kommentieren, würde das alles vereinfachen und ein einfaches Verlinken zum relevanten Thema in Discourse ermöglichen. Gibt es also Fortschritte in dieser Hinsicht, oder wird dies immer eine Einschränkung privater Foren bleiben?
Ich sehe, dass es nicht möglich ist, Kommentare aus einem privaten Forum einzubetten (auf einer Website, die eine separate Domain verwendet):
Was ein Kollege für Kommentare auf einer Ghost-Website verwendet, ist jedoch ein öffentliches Forum (auf einer komplett anderen Domain), das hauptsächlich kostenlose Beiträge veröffentlicht. Er hat kürzlich seinen ersten Mitglieder-exklusiven Beitrag veröffentlicht, und als ich das zugehörige Thema in Discourse in eine Kategorie verschob, die nicht von „Jeder“ sondern von einer bestimmten Gruppe (verbunden mit zahlenden Mitgliedern auf der Ghost-Website) eingesehen werden kann, zeigt das Widget nun die Meldung „Fehler beim Einbetten“.
Obwohl der OP sagte, dass private Foren (auf separaten Domains) das Einbetten nicht zulassen, handelt es sich hier um ein öffentliches Forum, aber mit einer privaten Kategorie. Liegt das Problem, das ich sehe, daran, dass eine private Kategorie in einem öffentlichen Forum funktional dasselbe ist wie ein privates Forum? Ich habe schließlich den folgenden Kommentar gelesen, der diese Aussage zu unterstützen scheint:
Wenn es der Fall ist, dass Themen aus privaten Kategorien in öffentlichen Foren nicht sofort eingebettet werden können, gibt es eine Möglichkeit, dies mit einer Anpassung des Widgets (und/oder der Plattform) zu erreichen? Ich habe es nicht sehr eilig, dieses Problem (hoffentlich) zu „beheben“, da es mir vorübergehend nichts ausmacht, die private Kategorie auf öffentlich zu setzen (da Discourse den privaten Ghost-Beitrag nicht scrapen kann und somit versehentlich seinen Inhalt Nicht-zahlern auf Discourse anzeigt), aber wenn dies möglich ist, würde ich es nicht ablehnen, zu einem späteren Zeitpunkt jemanden zu beauftragen, das Widget zu ändern und/oder einen PR für die Plattform einzureichen.
Hallo, ich benutze die Einbettungsfunktion mit meinem Ghost-Blog, stoße jedoch auf einige Probleme, wo die Blogbeiträge auf meinem Forum landen. Ich habe die untenstehenden Hosts eingerichtet:
Aufgrund von Herausforderungen mit der Subdomain-Einrichtung (ich habe meine Domain bei einem anderen ISP als dort, wo mein Discourse-Forum ist) habe ich mich für den Tag-Weg entschieden.
Das Problem, auf das ich stoße, ist, dass alle meine Blogbeiträge in der Kategorie Blog auf meinem Discourse-Forum landen. Ich benutze einen Admin-Benutzer für den Beitragsautor auf Discourse, alle 3 Kategorien erlauben Admins, neue Themen zu erstellen.
Gibt es Erkenntnisse, was dies verursachen könnte?
Vielleicht die Pfade für jeden angeben? Z.B. wenn Beiträge, die in die Blog-Kategorie gehören, unter /blog/<slug> liegen sollen, kann man IIRC /blog/* verwenden.
Das funktioniert nicht mit einem Ghost-Blog (zumindest nicht mit einer ziemlich Standardinstallation). Ich benutze meine Hauptdomain (alphagamer.net), Ghost-Blog fügt automatisch den Pfad basierend auf dem Titel des Blogbeitrags nach der Domain hinzu. Ich habe versucht, einen Pfad hinzuzufügen, aber er wird einfach entfernt.
Ich habe mich gefragt, ob Discourse-Kommentare (Thema) in ein Discourse-Thema eingebettet werden könnten? Vielleicht mit einem Iframe, der eine Antwortschaltfläche enthält, aber nicht den Rest der Website. D. h. keine Kopf- oder Fußzeile.
Ich habe es mit Ghost ohne Probleme verwendet, abgesehen von der fehlenden SSO-Integration, die die Benutzer verärgert.
Ich erinnere mich, dass ich den Beispielcode etwas anpassen musste.
Ich denke, es funktioniert gut, wenn Sie 1 Einbettung haben. Ich denke, wenn Sie versuchen, verschiedene Arten von Blogbeiträgen in verschiedenen Discourse-Kategorien einzubetten, sind einige Anpassungen erforderlich.
Ich dachte, ich könnte es mit den Tags zum Laufen bringen, aber Tags allein scheinen (für mein Setup) nicht zu funktionieren. Ich glaube, ich muss bei Ghost Content Collections erstellen, was es mir im Grunde ermöglicht, eine Ordnerstruktur hinzuzufügen (wie alphagamer.net/blog/ und die anderen, die ich brauche). Ich werde dies am Wochenende versuchen, meine „Pfad-Allowlist“ aktualisieren und hier posten, wenn ich es zum Laufen bringe.
Kann die Allowlist durch Kommas getrennt sein, wie hier?
/blog/.*,/articles/.*
Bearbeiten: Es scheint, dass dies nicht funktioniert. Das hier auch nicht:
/(blog|articles)/.*
Vielleicht müssen dies zwei separate Hosts sein?