Das ist bezüglich Themes vs. Plugins und auch in Bezug auf das spezifische Beispiel, das ich erwähnt habe, sehr hilfreich. Danke.
Bisher habe ich Änderungen vorgenommen, indem ich mich durch die Details des Discourse-Codes gearbeitet habe (wo ist dieses Objekt definiert, was steuert diese Vorlage, wo befindet sich die Logik, die diese Aktion verarbeitet usw.). Das war jedoch langsam voranschreitend.
Ich denke, ein effizienterer Weg wäre, mich auf die API zu konzentrieren. Auf diese Weise muss ich mich nicht durch alle Details des ausgereiften Discourse-Codes arbeiten und kann mich stattdessen auf den Aufbau eines Themes anstelle eines Plugins konzentrieren – oder vielleicht einfach Änderungen im „Anpassen“-Dashboard vornehmen.
Grundsätzlich scheint es viel überschaubarer zu sein, herauszufinden, wie die API funktioniert, als sich durch die Discourse-Codebasis zu arbeiten.
Um beim genannten Beispiel zu bleiben: Wenn ein Benutzer ein Moderator einer Kategorie ist, soll dieser Benutzer Themen auf der Kategorie-Seite anpinnen können.
Könnte ich das ohne ein Plugin umsetzen? Lassen Sie mich versuchen, es zu skizzieren:
1. Ist ein Benutzer ein Moderator einer Kategorie?
Ich sehe derzeit nichts in der API, das mir mitteilen würde, ob ein Benutzer ein Moderator einer Kategorie ist. Ich würde erwarten, dass dies in einem GET-Aufruf zum Abrufen einer Kategorie zu finden ist, aber ich sehe dort keinen solchen Aufruf. Oder vielleicht im GET-Aufruf zum Abrufen eines Benutzers, aber dort sehe ich keine Auflistung der Kategorien, für die der Benutzer ein Moderator ist.
Könnte ich diese hinzufügen?
Alternativ könnte ich vielleicht ein benutzerdefiniertes Feld (custom_field) für den Benutzer oder die Kategorie erstellen, um die Moderatorrolle zu identifizieren, und dann beim Laden einer Kategorie-Seite einen API-Aufruf für dieses benutzerdefinierte Feld tätigen.
2. Wenn der Benutzer ein Moderator ist, die Pin-Schaltfläche anzeigen.
Wenn ich Frage (1) beantworten kann, gehe ich davon aus, dass ich diese Schaltfläche einfach mit Frontend-JavaScript und CSS hinzufügen kann, wobei sie nur angezeigt wird, wenn der Benutzer ein Moderator ist.
3. Benutzer (der Moderator ist) klickt auf die Schaltfläche, und das pinnt das Thema.
In der API scheinen Themen tatsächlich ein Merkmal „pinned“ (boolean) zu haben. Ich nehme an, dies korreliert damit, ob sie in ihrer Kategorie angepinnt sind, da es so aussieht, als ob jedes Thema nur eine Kategorie hat.
Also könnte ich hier, wenn der Moderator auf die „Pin“-Schaltfläche klickt, den Status „pinned“ des Themas auf True aktualisieren. Falls das nicht funktioniert, könnten auch benutzerdefinierte Felder eine Lösung sein (obwohl ich nicht sehe, wie man benutzerdefinierte Felder zu einem Thema hinzufügt).
Mit diesem Ansatz oder etwas Ähnlichem scheint es mir also möglich, diese Aufgabe mit der API zu erledigen, wofür ich, wenn ich ein Plugin verwenden würde, viele Dateien der Discourse-Codebasis durchsuchen müsste.
Klingt das richtig?