Danke für den Hinweis, @NateDhaliwal
Nein, es wird nur die URL nach einer bestimmten Zeichenfolge durchsucht und der Composer mit einer von wenigen Vorlagen vorausgefüllt, wenn diese Zeichenfolge gefunden wird.
Das Docus-Plugin fügt diese Zeichenfolge als eine seiner Funktionen in URLs ein, aber diese Komponente funktioniert mit jeder Zeichenfolge oder jedem Zustellmechanismus, den jemand verwenden möchte, sodass sie eigenständig sein kann. Ich werde die Readme aktualisieren, um dies zu erklären.
Zum Beispiel könnten Sie ihm sagen, er solle nach /tag/introductions suchen, und es würde zu einer Tag-Vorlagenkomponente werden. Oder Sie könnten es so verwenden, wie ich es tue, um diese Vorlage in Tag-Schnittpunkten einzufügen, wie z. B.: tags/intersection/introductions/webdevs
Ich werde die Zeichenfolge, nach der gesucht wird, in den Admin-Bereich verschieben, damit es für andere einfacher ist, sie zu ändern und zu verwenden, ohne im Code nachsehen zu müssen.
Ehrlich gesagt kämpfe ich seit ein paar Tagen mit einem Fehler darin und habe mir (die wenigen verbliebenen Haare) ausgerissen, und hätte es wahrscheinlich noch nicht teilen sollen. Es fügt immer eine Vorlage ein, wenn es diese Zeichenfolge in der URL findet.
Manchmal möchte man es jedes Mal, wenn es diese Zeichenfolge findet, manchmal nur, wenn es noch keine anderen Threads gibt, und manchmal nur, wenn dieser bestimmte Benutzer an dieser Stelle noch keinen Thread erstellt hat.
Was jetzt passiert:
Der Initialisierer überwacht ein Tag/eine Zeichenfolge in der URL und öffnet automatisch eine Vorlage in Discourse, wann immer er eine Übereinstimmung sieht. Das funktioniert gut, wenn ich immer eine Vorlage öffnen möchte, aber es bricht zusammen, wenn ich Bedingungen wie „nicht öffnen, wenn bereits ein Thema existiert“ oder „nicht öffnen, wenn dieser Benutzer bereits gepostet hat“ benötige.
Was ich versucht habe:
- Ich habe eine Flagge
settings.auto_open_check_user_onlyeingeführt. Wenn sie aktiviert ist, sucht der Code nachtags:tag1+tag2 @username; wenn sie deaktiviert ist, sucht er nur nachtags:tag1+tag2. Das Ziel war es, zwischen „irgendein Thema existiert“ und „das Thema dieses Benutzers existiert“ zu unterscheiden. - Ich habe eine Verzögerung von 500 ms hinzugefügt, bevor das Speichern von Entwürfen wieder aktiviert wird, um Konflikte mit dem automatischen Speichern von Discourse zu vermeiden.
- Ich habe begonnen, grundlegende Informationen zu protokollieren (Trigger-ID, Vorlagenname), damit ich zumindest sehen kann, wann das automatische Öffnen ausgelöst wird.
Ich vermute, die Probleme sind:
- Die Such-API von Discourse gibt Ergebnisse zurück, bevor der Suchindex aktualisiert wird, sodass das System weiterhin denkt, „es existieren keine Themen“, selbst unmittelbar nachdem ein Benutzer gepostet hat.
- Das Filtern nach
@usernamehilft nicht, wenn der Benutzername nicht exakt übereinstimmt oder die Tags nicht mit den Vorlageneinstellungen übereinstimmen. - Ich breche die ausstehenden Entwurfs-Timer von Discourse niemals ab, sodass, obwohl ich das Speichern für 500 ms blockiere, die in die Warteschlange gestellten Speichervorgänge später ausgeführt werden und den Entwurf/Composer wiederherstellen.
Ich versuche gerade:
- Nach dem Aufruf von
deleteDraftsofort das Debouncing von Discourse’s_saveDraftabzubrechen, damit alte Entwürfe nicht wieder erscheinen können. - Einen kurzlebigen Cache zu erstellen, der sich merkt: „Ich habe hier bereits ein Thema mit diesen Tags erstellt“, um die Verzögerung des Suchindex abzudecken.
- Drei Modi zu erstellen, die im Admin-Bereich ausgewählt werden können
always
Öffnet die Vorlage jedes Mal, wenn die Tags übereinstimmen. Keine Suchen, keine Überprüfungen – einfach den Composer öffnen.
ifNoTopics
Verwendet die Discourse-Suche, um zu fragen: Existiert bereits ein Thema mit diesen Tags?
- Wenn ja → nicht öffnen.
- Wenn nein → öffnen.
Gut für Situationen, in denen „nur ein Thema existieren sollte“.
ifUserHasNoTopic
Sucht nach: Hat dieser spezifische Benutzer bereits ein Thema mit diesen Tags erstellt?
- Wenn ja → nicht öffnen.
- Wenn nein → öffnen.
Nützlich, wenn jeder Benutzer seinen eigenen persönlichen Thread erhalten soll.
Wenn jemand Vorschläge hat, wie er diese Einstellungen erstellen würde, würde ich mich freuen, davon zu hören.