Einträge der Themenliste anpassen (Sortieren, Gruppieren, Filtern) für bessere Organisation

TLDR:
Was ist der schnellste Weg, die Zusammensetzung von filteredTopics (Zeile 26) zu ändern? Ich hätte gerne die volle Kontrolle darüber, welche Themen (mit welchen Eigenschaften) gesammelt werden.

Hallo Community,

ich benutze die GitHub - discourse/discourse-topic-thumbnails: Display thumbnails in topic lists Theme-Komponente in unserer gehosteten Umgebung und wir wollten einige zusätzliche Änderungen daran vornehmen, um unseren Bedürfnissen gerecht zu werden.

Anstatt alle Themen in einem großen Block von Grid-Elementen vermischt zu haben, möchten wir etwas Ordnung hineinbringen.
Wir streben Folgendes an:
Zuerst möchten wir nach gesehen/ungesehen sortieren, dann nach Kategorie; danach möchten wir sie nach Chronologie gruppieren (und Buckets erstellen, z. B. Heute (alle relevanten Beiträge von heute), Gestern, Letzte Woche.

Unsere Themenliste sollte also mit 3 verschiedenen Grids untereinander so aussehen:

<HEUTE, GESTERN, LETZTE WOCHE> stellt eine Gruppierung dar

ANGEPINNT:
Thema 20, Thema 30, Thema 40

UNGESEHEN:
<HEUTE : [ART: Thema 1, Thema 2], [DESIGN: Thema 4]> <GESTERN: [KONZEPT: Thema 3], [ANDERE_KATEGORIE: Thema 6, Thema 11]> <LETZTE WOCHE: Thema 8, Thema 10>

GESEHEN:
<HEUTE : [ART: Thema 4, Thema 12], [DESIGN: Thema 4]> <GESTERN: [CGI: Thema 13], [ANDERE_KATEGORIE: Thema 16, Thema 21]>, <LETZTE WOCHE: Thema 18, Thema 100>

Meine Hauptfrage wäre, wie ich die Abfrage erstellen/erweitern kann, die das Ergebnis erzeugt, über das dann in

über filteredList iteriert wird.

Ich habe eine Stelle gefunden, an der dies vielleicht gefüllt wird, aber ich war mir nicht sicher, wie ich es “erweitern” kann. Es scheint ein queryParam-System und einige Routen-Sachen zu geben, die ein Ergebnis beeinflussen können, aber ich habe es nicht verstanden.

Kann mir jemand den richtigen Ort zeigen?

Wir verwenden die oben genannte Theme-Komponente, was bedeutet, dass wir in unseren Möglichkeiten eingeschränkt sind.
Es wäre hilfreich für mich, wenn mir jemand zeigen könnte, wie man filteredList zum Beispiel auf nur ungelesene Beiträge beschränkt - von da an könnte ich es selbst weitermachen.

Vielen Dank!

CC @pfaffman

Nur zur Info: Topic List Thumbnails ist eine #customization:theme-Komponente und kein Plugin. :+1:

Ja, danke, das war mir bewusst, aber ich habe die richtigen Begriffe übersehen. Ich passe das an.

Jammy, ich habe eine TLDR hinzugefügt. Hast du irgendwelche Hinweise zu dieser verkürzten Frage?
Danke

Das liegt leider außerhalb meines Fähigkeitsspektrums. :slight_smile:

Haben Sie sich angesehen, wie man Klassen in den Developing Discourse Themes & Theme Components modifiziert? Dort gibt es vielleicht etwas, das helfen kann. Eine Suche könnte auch einige hilfreiche Beispiele liefern, wenn Sie Ihre Schlüsselwörter erweitern?

Ja, danke Jammy, ich bin mir dieser Dinge bewusst und habe auch einige private Plugins geschrieben (oder erweitert). Die Sache hier ist jedoch, dass ich nicht verstehe, wo die Liste aggregiert wird und wie die gesamte LOGIK zum ABFRAGEN VON THEMEN funktioniert oder wo sie sich tatsächlich befindet. Wenn ich eines von beiden wüsste, könnte ich weitermachen.

Ich füge noch ein paar Leute in CC hinzu, da ich diese im Git-Code gesehen habe.

Nur zur Information, aber es ist eigentlich schlechte Meta-Etikette, Teammitglieder auf diese Weise zu markieren. Daher habe ich diese entfernt, um kein Muster zu schaffen, das andere möglicherweise nachahmen. :+1:

Es tut mir wirklich leid, dass Ihr Thema nicht mehr Anklang gefunden hat. Ich kenne mich damit nicht aus, daher kann ich leider keine direkte Antwort geben.

Sind Sie mit Ihrer Recherche/Ihren Versuchen weitergekommen?

Ich dachte, ich wäre schlau, indem ich die richtigen Leute in CC gesetzt habe :rofl:

Und nein, bin noch nicht weiter gekommen. Ich habe versucht, die Themenliste dreimal anzuzeigen und dann unerwünschte Themen in jeder davon auszublenden, aber dann kam die „Mehr laden“-Funktionalität zum Einsatz und große Teile des DOM wurden neu geschrieben und meine JS-Berechnungen wurden zu schwer und verursachten seltsame Effekte.

Ich habe festgestellt, dass ich es richtig machen muss, indem ich die von Discourse bereitgestellten APIs verwende.

Ich habe hier einige bedeutende Fortschritte gemacht und hatte unterwegs noch ein paar weitere Fragen:

  • Gibt es einen API-Endpunkt, den ich verwenden kann, um alle angehefteten Themen zu erhalten? Ähnlich wie /latest.json oder /top.json?
  • Gibt es einen JS-Befehl (angenommen, ich befinde mich in einem Plugin), den ich verwenden kann, um die Themenliste neu zu rendern, nachdem ich eine Statusänderung an den Elementen der Themenliste vorgenommen habe, damit die Änderung sofort widergespiegelt wird? Ich schätze, ich muss mit einem Observer für topics. arbeiten?

Außerdem habe ich den folgenden Artikel gefunden, der alles enthält, was ich brauche, um die gewünschte Themenliste anzupassen.

https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949

Schön, dass Sie Fortschritte gemacht haben – Sie betreten eindeutig Neuland!

Angeheftete Themen können durch Abfrage von /search.json?expanded=true&q=in%3Apinned abgerufen werden
Suche ohne tatsächliches Suchwort verwenden.

Dies gibt nur eine Liste von Themen-IDs oder vereinfachte Themen-Datensätze zurück. Sie müssten nachfolgende Ajax-Anfragen an /t/${topic.id}.json stellen, um den vollständigen Datensatz zu einem Thema zu erhalten.

Ich bin immer noch daran interessiert, wie ich eine Neudarstellung einer Themenliste über JS erzwingen kann.