Topic ID als Variable?

Gibt es eine Möglichkeit, die Themen-ID als Variable innerhalb eines Themas zu erhalten?

Anwendungsfall: Wir haben Kategorien für Support- und Fehlerverfolgungstickets. Ich möchte sie mit Vorlagen wie folgt einrichten.
Das:

> Entfernen Sie diese Zeile **nicht**: Supportanfrage #$(topicid)

Sieht so aus:

Entfernen Sie diese Zeile nicht: Supportanfrage #246

Ich bin offen für andere Wege, um die Informationen zu erhalten. Ich bin mir nur nicht sicher, wie das geht.

1 „Gefällt mir“

Sie versuchen, die Topic-ID in den Rohbeitrag des Topics einzufügen?

Welches Problem soll das lösen?

1 „Gefällt mir“

Es wird das Problem lösen, dass ich meinem Support-Personal sagen muss, dass es zuerst ein neues Thema erstellen, es dann speichern, dann die URL ansehen und die ID-Nummer abrufen muss, dann zurückgehen und das Thema bearbeiten muss, um die Nummer manuell in den Text einzufügen.

Wofür verwenden Sie die Topic-ID Nr. im Body des OP in Ihrem Anwendungsfall hier?

1 „Gefällt mir“

Eine eindeutige ID # für ein Ticket/einen Fehler.

Wohin geht dieses Ticket/dieser Bug? Die ID ist in der URL; dort ist sie persistent und nie falsch. Wie hilft es, die Topic-ID im Text des Topics zu haben? Und, wie Sie richtig bemerken, wenn sie im Nachrichtentext steht, kann sie jeder ändern, löschen oder falsch eingeben.

Verwendet etwas die Topic-ID? Wenn ja, was und wie?

1 „Gefällt mir“

Es wird einfacher sein, eine benutzerdefinierte Komponente zu erstellen, die dies an die richtigen Beiträge anhängt, anstatt eine Vorlage auszufüllen.

Wenn Sie den Code Ihres Themes unter admin > themes & components bearbeiten… und dies zum JS-Tab hinzufügen, sollten Sie mit einigen Anpassungen das gewünschte Ergebnis erzielen:

import { apiInitializer } from "discourse/lib/api";
import Component from "@glimmer/component";

class TopicIdentifier extends Component {
  get topicId() {
    return this.args.post?.topic?.id;
  }

  get shouldShow() {
    const firstPost = this.args.post?.post_number === 1; // erster Beitrag im Thema
    const desiredCategories = [45, 3]; // eine durch Kommas getrennte Liste von Kategorie-IDs, in denen dies angezeigt werden soll
    const isInCategory = desiredCategories.includes(
      this.args.post?.topic.category.id
    );

    return firstPost && isInCategory;
  }

  <template>
    {{#if this.shouldShow}}
      <!-- Sie können den Inhalt unten bearbeiten, {{this.topicId}} ist, wo die Thema-ID eingefügt wird -->
      Diese Thema-ID ist
      {{this.topicId}}
      <!-- Sie können den Inhalt oben bearbeiten -->
    {{/if}}
  </template>
}

export default apiInitializer((api) => {
  api.decorateCookedElement((element, helper) => {
    const wrapper = document.createElement("div");
    wrapper.className = "custom-topic-id"

    helper?.renderGlimmer(
      wrapper,
      <template><TopicIdentifier @post={{helper.model}} /></template>
    );

    element.appendChild(wrapper);
  });
});

Sie können die Kategorie-ID aus ihrer URL finden, um desiredCategories zu konfigurieren. Zum Beispiel hat die Support-Kategorie hier auf Meta die ID 6.

Sie können CSS hinzufügen, um dies nach Belieben zu gestalten, mit dem CSS-Tab… zum Beispiel

.custom-topic-id {
  display: inline-block;
  background: yellow;
}

3 „Gefällt mir“

Ja, es kann falsch geschrieben werden. Deshalb müssen Sie sich keine Sorgen machen, es falsch zu schreiben, wenn Sie eine Variable verwenden.

Es ist hilfreich, weil ich der Benutzer bin und mein Workflow so eingerichtet ist.

Sie können Discourse derzeit nicht nach Thema-ID durchsuchen. Wenn sich das # im Text des Themas befindet, ist es jetzt Teil der Suchergebnisse.

So kann ich einem Kollegen sagen: „Hey, suche nach Bug #138 und lass mich wissen, was du denkst."

Dann ist es für Nancy wirklich einfach, auf die Website zu gehen, nach 138 zu suchen und ein Ergebnis zu erhalten.

2 „Gefällt mir“

Sie müssen nicht suchen:

/t/-/id – aber wirklich /t/id funktioniert.

Sie können einfach /t/138 eingeben und müssen nicht suchen. Aber wenn Sie mit einer Person sprechen, wäre es dann nicht sinnvoller, in einem Gespräch zu sagen: “Suche nach einem Bug über ‘einige Wörter, die sie kennen’” anstatt einer Zahl?

Und das wäre mein anderer Vorschlag gewesen.

Ich glaube, ich hätte renderInOutlet anstelle von decorateCookedElement verwendet, aber das liegt wahrscheinlich daran, dass ich decorateCookedElement nicht vollständig verstehe.

Aber das erlaubt Ihnen nicht, nach einem Bug/Topic nach topic_id zu suchen.

1 „Gefällt mir“

Ich werde das ausprobieren. Danke für die Info. Ist das der Teil des Körpers, der durchsuchbar wird?

Aber ich möchte suchen. Es ist einfacher.
Gehe zur Website, füge dann /t/id zur URL am oberen Fensterrand hinzu VS gehe zur Website und gib die ID in das Suchfeld ein, das sich genau in der Mitte der Seite befindet.

Wenn ich mit einer Person spreche oder eine Nachricht tippe, ja, eine Zahl ist prägnanter und weniger fehleranfällig als “Suche nach dem exakten Titel, der vielleicht 5 Wörter lang ist”.

Ich werde das prüfen, aber wenn es die Verwendung in einem Suchfeld unmöglich macht, dann funktioniert es für mich nicht.

Ich liebe Discourse wirklich, und ich habe eine MENGE nützliches Feedback und Hilfe von allen hier bekommen.
Was ich nicht verstehe, ist, dass mir gelegentlich Leute sagen: “Das solltest du nicht so machen, weil dieser Weg besser ist.” Nun, nein, dieser Weg ist besser für dich, aber jener Weg ist besser für mich. Und keiner von beiden ist falsch.

3 „Gefällt mir“

Ja, dann mach dir keine Umstände. Leider fügt es dem Thema nur Inhalt hinzu, wenn es gerendert wird … es fügt es nicht zur Datenbank hinzu, um es durchsuchbar zu machen. Ich denke, was du letztendlich bräuchtest, wäre ein benutzerdefiniertes Plugin oder ein benutzerdefiniertes Skript, das zu Discourse Automation hinzugefügt wird, damit es vollautomatisch ist.

Die Suche nach Themen-ID oder die Einbeziehung in eine Vorlage ist keine gängige Anfrage, daher unterstützen wir dies nicht standardmäßig.

Ich denke, es ist so, dass die Stammgäste hier wissen, dass es keine Funktion ist, die wir derzeit haben, daher versuchen wir, dich zu unterstützen, indem wir einige mögliche Workarounds finden.

2 „Gefällt mir“

Und oft, wenn Sie zurückgehen, können Sie eine bessere Lösung finden.

Wenn Sie die Topic-ID wirklich in den Text einbetten möchten, damit Sie sie in der Suche finden können, benötigen Sie ein Plugin, und es könnte Ticket123 zum Roh-Text hinzufügen (ich glaube, die Suche betrachtet den Roh-Text?). Die Topic-ID existiert nicht, bevor Sie das Topic erstellen, daher können Sie sie nicht einfügen, wenn Sie es erstellen.

Oh! Vielleicht möchten Sie ein Plugin, das ein Tag bug123 hinzufügt, wenn ein Topic in einer Bug-Kategorie erstellt wird. Dann könnten Sie darauf als #bug123 verweisen und es überall verlinken, wo Sie es erwähnen, und es durchsuchen können. Wenn Sie selbst gehostet oder im Enterprise-Bereich sind, wäre das nicht allzu schwer. Ich stelle mir vor, jemand in Marketplace würde es für 250 bis 500 US-Dollar machen.

Oder, wenn Sie einen Bug nach Nummer “suchen” möchten, könnten Sie eine Theme-Komponente hinzufügen, die es Ihnen ermöglicht, ihn in eine “Bug-Box” einzugeben und direkt dorthin zu gelangen. Vielleicht ist das eine Lösung, die funktionieren würde und kein Plugin erfordert.

1 „Gefällt mir“

Ich habe es geschafft, die Themen-ID diskreter anzuzeigen. Sie ist immer noch nicht durchsuchbar, aber damit kann ich leben, bis das, was ich wirklich brauche, Realität wird.


<script type="text/discourse-plugin" version="0.5">
api.decorateWidget('post-meta-data:after', dec => {
  if (dec.attrs.post_number === 1) {
    const topic = dec.getModel().get('topic');
    return dec.rawHtml(`<div class="post-info topic-id"><b>&nbsp#${topic.get('id')}</b></div>`);
  }
});
</script>

Das Problem ist, dass dieser Code jetzt veraltet ist und ich nicht weiß, wie ich ihn reparieren kann.
Was müsste er aktualisiert werden, um konform zu sein?

Ich habe GitHub - literatecomputing/discourse-custom-components als Beispiel dafür erstellt, wie man das macht.

ist ein triviales Beispiel für das Einfügen einer Komponente. Sie würden also etwas Code vor <template> hinzufügen, um die Topic-ID und die Logik für die Anzeige zu erhalten.

Ich denke, Sie möchten topic-list-before-link als Plugin-Outlet verwenden.

Ich verstehe das alles nicht. Ich bin kein Programmierer.
Der Code, den ich gepostet habe, macht Folgendes:


Wie würde ich das mit Ihrem Code machen?

Wenn ich mich nicht irre, zeigt die Eingabe von topic:id in die Suchleiste das Thema in den Ergebnissen an.
Zum Beispiel bringt die Suche nach topic:374168 this nur Beiträge aus diesem Thema hervor.

Ich frage mich… würde ein TC, der eine Ajax-Anfrage sendet, um den Rohtext des Themas zu aktualisieren, ausreichen?

1 „Gefällt mir“

Das funktioniert nur für dieses Thema, versuche ein anderes zufälliges. Versuche, nach „one two four two four zero“ zu suchen, das ist die ID des Tag-Banners-Themas.

Meinen Sie topic:124240? Das Füllwort („Hallo“) war nur ein Beispiel. Im Fall von Tag Banners funktioniert „Hallo“. Vielleicht, wenn Sie ein gängiges Wort in Support-Tickets haben oder einfach ein gängiges Wort im Allgemeinen, können Sie das versuchen?

Haben Sie den Code in Topic ID as a variable? - #7 by awesomerobot ausprobiert?

Auch wenn Sie nach einer Topic-ID suchen möchten, könnten Sie wahrscheinlich eine Komponente erstellen, die eine Topic-ID akzeptiert und dann einfach zu diesem Topic springt.

1 „Gefällt mir“