November 2023 - Überarbeitung der Discovery-Routen: Wie wirkt sich das auf mein Theme/Plugin aus?

Als Teil unseres Projekts zur Aktualisierung von Discourse auf die neueste Version von Ember haben wir an einer erheblichen Umstrukturierung der Discovery-Routen (auch bekannt als „Themenliste“) gearbeitet.

Dieses Thema richtet sich an Theme-/Plugin-Entwickler und zielt darauf ab, die Arten von Theme-/Plugin-Aktivitäten aufzulisten, die von der Umstrukturierung betroffen sein könnten.

Hintergrund

Diese Umstrukturierung ist notwendig, da modernes Ember keine „benannten Outlets“ wie {{outlet \"topics\"}} mehr unterstützt, die wir auf diesen Routen ausgiebig verwendet haben. Im Wesentlichen wurden alle Controller/Vorlagen, die zuvor in benannte Outlets gerendert wurden, in Komponenten umgewandelt.

Unterwegs haben wir die Gelegenheit genutzt, den relevanten Code zu modernisieren und zu konsolidieren (z. B. teilen jetzt alle Arten von Discovery-Routen denselben Controller und dieselbe Vorlage).

Die Implementierung der Änderung im Kern ist noch nicht abgeschlossen, aber eine Arbeit in progress finden Sie in diesem Branch. Wir haben kein genaues Datum für das Mergen, erwarten es aber innerhalb der nächsten Wochen. Wenn Sie Fragen oder Bedenken haben, lassen Sie es uns bitte wissen!

Welche Theme-/Plugin-Aktivitäten sind betroffen?

Diese Umstrukturierung betrifft hauptsächlich die „Controller“-Schicht. Routen sind weitgehend unverändert, und alles von der <TopicList />-Komponente abwärts ist ebenfalls unberührt.

Wir erwarten, dass die einzigen Auswirkungen auf Themes/Plugins bestehen, die tief in den Kerncode eingreifen (z. B. über modifyClass und Vorlagenüberschreibungen). Definierte APIs und Outlets sind unberührt.

Vorlagenüberschreibungen

:shushing_face: Diese Vorlagen wurden in Komponenten umstrukturiert. Alle vorhandenen Überschreibungen funktionieren stillschweigend nicht mehr.

  • navigation/categories
  • navigation/category
  • navigation/default
  • navigation/filter
  • discovery/topics

:boom: Diese Vorlagen wurden stark umstrukturiert. Alle vorhandenen Vorlagenüberschreibungen können wahrscheinlich katastrophale Fehler auf der Website verursachen.

  • discovery
  • tag/show
  • user-topics-list
  • user/messages
  • discovery/categories
  • components/basic-topic-list
  • components/d-navigation

Technisch ist es möglich, die neuen Vorlagen zu überschreiben, die durch diese Änderung eingeführt wurden. Vorlagenüberschreibungen werden jedoch nicht empfohlen und sind auf dem Rückzug.

Daher sollten alle Vorlagenüberschreibungen entfernt und durch robustere Erweiterungs-APIs (z. B. Plugin-Outlets) ersetzt werden. Wenn Sie etwas tun, das mit den vorhandenen Erweiterungspunkten von Discourse nicht möglich zu sein scheint, lassen Sie es uns bitte wissen!

modifyClass und lookup() Aufrufe

:wastebasket: Diese Klassen existieren nicht mehr. modifyClass funktioniert stillschweigend nicht mehr. Lookups geben null zurück (und können daher zu Fehlern führen). In den meisten Fällen haben wir Shims für Abwärtskompatibilität eingeführt (siehe Fußnoten).

  • controller:discovery
  • controller:discovery/topics[1]
  • controller:discovery-sortable (-> controller:discovery/list)
  • controller:discovery-filter (-> controller:discovery/filter)
  • controller:navigation/categories
  • controller:navigation/category [2]
  • controller:navigation/default
  • controller:tag/show [3]
  • controller:discovery.* (-> controller:discovery/list)

:technologist: Diese Klassen wurden erheblich umstrukturiert. modifyClass- und lookup-Aufrufe müssen möglicherweise umstrukturiert werden:

  • route/discovery
  • route/discovery.*
  • route/tag-show

Routen

:motorway: Routennamen (d. h. router.currentRouteName) sind unverändert.

:clipboard: Die model()-Hooks der Discovery-Route (d. h. router.currentRoute.attributes) sind größtenteils unverändert.

Plugin-Outlets

:electric_plug: Alle Plugin-Outlets und ihre Argumente sind unverändert.

HTML / CSS

:art: HTML-Struktur und Klassen sind weitgehend unberührt.


  1. Lesezugriff auf die ‘model’-Eigenschaft wurde mit einer Deprecation-Meldung geshimmt. ↩︎

  2. Lesezugriff auf die ‘category’-Eigenschaft wurde mit einer Deprecation-Meldung geshimmt. ↩︎

  3. Lesezugriff auf die ‘tag’-Eigenschaft wurde mit einer Deprecation-Meldung geshimmt. ↩︎

16 „Gefällt mir“

Wir werden diese Woche die Tests für diese Änderung auf unserem gesamten Hosting ausweiten, mit dem Ziel, sie Anfang nächster Woche (6. November) in main/tests-passed zusammenzuführen.

6 „Gefällt mir“

Diese Änderung ist jetzt in main/tests-passed live

3 „Gefällt mir“