Externe ID in embed.js bereitstellen

Ich muss Beiträge auf einer externen Website laden, bei denen ich die post_id nicht kenne, aber die external_id, die ich bei der Erstellung des Themas konfiguriert habe, DO kenne.

Kann mir bitte jemand die external_id-Variable in der embed.js-Logik zur Verfügung stellen oder mir beibringen, was ich übersehe?

Beispielunterstützung benötigt:

window.DiscourseEmbed = {
discourseUrl: ‘https://forums.blah.org/’,
external_id: ‘2023-4’
};

Ich gehe davon aus, dass Sie die Themen über die API erstellt und den Parameter external_id gesetzt haben.

Ich bin mir nicht sicher, ob das hilft, aber Discourse hat eine Route t/external_id/:external_id. Es scheint, dass diese nur JSON-Daten zurückgibt:

Sie können also das JSON des Themas unter (zum Beispiel) abrufen

/t/external_id/2023-4.json

Dies würde den Inhalt und die id des Discourse-Themas zurückgeben. Ich glaube jedoch nicht, dass dies Ihr Problem löst.

Beim Testen werden JSON-Daten zurückgegeben, aber Discourse führt eine automatische Weiterleitung zur tatsächlichen Discourse-Themen-URL durch, wenn Sie die Anfrage stellen. Zum Beispiel leitet mich eine GET-Anfrage an http://localhost:4200/t/external_id/1.json zu http://localhost:4200/t/testing-the-external-id-param/206.json weiter.

Ich möchte etwas in der formatierten Form von eingebetteten Beiträgen haben. Discourse macht das Layout bereits gut und ich möchte das Rad nicht neu erfinden.

Indem ich nicht nach external_id suchen kann, müsste ich die Forumsthema-ID in meiner Datenbank speichern und auf diese Weise suchen. Das erscheint redundant, wenn wir bereits eine eindeutige Variable in external_id haben, als ich das Thema über die API erstellt habe.

1 „Gefällt mir“

Ich glaube, ich verstehe jetzt. Sie möchten das hier gezeigte Skript verwenden: https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#alternate-configuration-linking-to-existing-topics-6. Aber anstatt des Parameters topicId möchten Sie den Parameter external_id verwenden.

Möglicherweise könnte dies als Funktion hinzugefügt werden.

Es könnte auch möglich sein, eine Anfrage auf dem Client zu stellen, um zum Beispiel
http://localhost:4200/t/external_id/1.json
Dann extrahieren Sie die tatsächliche URL des Themas aus der Antwort und entweder parsen Sie diese URL, um die id des Themas zu extrahieren, oder stellen Sie eine zweite Anfrage an die URL des Themas, um die Themen-ID zu erhalten.
Dies scheint fehleranfällig zu sein.

Wenn Sie das Einbettungsskript auf dem Server anstelle des Clients hinzufügen, könnten Sie einfach eine GET-Anfrage an http://localhost:4200/t/external_id/1.json stellen, alle erforderlichen Aktionen ausführen, um die id des Discourse-Themas zu erhalten, und dann das Skript mit dieser id in Ihre Webseite einfügen.

Das ist gutes Feedback und gibt mir einige Denkanstöße. Die Feature-Anfrage ist am einfachsten, aber ich mag einige Ihrer Ideen, an die ich nicht gedacht hatte!

1 „Gefällt mir“