Wie man benutzerdefinierte Tag-Reihenfolge implementiert

Hallo.\n\nIch versuche, eine benutzerdefinierte Reihenfolge von Thema-Tags nach ihrem Tag-Gruppen-Namen-Wert durchzuführen.\n\nIch habe mir die Theme-Komponenten angesehen und glaube, dass dies der richtige Weg ist, aber ich hätte gerne eine Meinung dazu und einige Hinweise, da dies meine erste Theme-Komponente wäre.\n\nViele Grüße

3 „Gefällt mir“

Ich habe das Feld „Tag-Beschreibung“ verwendet, um eine Ganzzahl zu speichern und die gewünschte Reihenfolge zu simulieren. Da die Tag-Gruppe weder in der Tag-Struktur noch im DOM verfügbar ist, habe ich diesen Weg gewählt.

Anschließend habe ich mit einem Head-Code-Snippet aus dem Theme-Editor das folgende Skript in das DOM eingefügt.

Dies ermöglichte mir, die Tags dynamisch neu zu ordnen. Obwohl es derzeit ein „Hack“ ist, funktioniert es zumindest.

<script type="text/discourse-plugin" version="0.8">
  api.addTagsHtmlCallback(function(topic, params) {
    const containers = document.querySelectorAll(".discourse-tags");
    for (const container of containers) {
      const children = Array.from(container.children);

      children.sort((a, b) => {
        const orderA = parseInt(a.getAttribute("title"));
        const orderB = parseInt(b.getAttribute("title"));
        return orderA - orderB;
      });

      children.forEach(child => container.appendChild(child));
    }
  }, {priority: 100});
</script>