Abzeichen vergeben, wenn Nutzer einen Link besuchen

Wie kann ich einem Benutzer automatisch eine Auszeichnung verleihen, wenn er einen Link innerhalb des Discourse-Forums besucht?

z.B. https://myforum.example.com?special_access=true

Wie wäre es mit der Verwendung der topic_link_clicks-Tabelle?

Ich glaube, ich habe vielleicht eine manuelle Auszeichnung, die davon profitieren könnte. :thinking: Ich werde darüber nachdenken.

1 „Gefällt mir“

Wenn es sich um einen bestimmten Link handelt, der in einem bestimmten Beitrag geteilt wurde, denke ich, dass dieser ausreichen würde:

SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
  LEFT JOIN topic_links tl ON tl.post_id = p.id
  LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
  AND tl.url = 'https://meta.discourse.org/'
  AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id

Sie müssten die post_id Ihres spezifischen Beitrags aus seinem Post-JSON abrufen (oder eine Suche über den Daten-Explorer durchführen).

2 „Gefällt mir“

Ich denke, das könnte funktionieren.

Ich möchte dieses Abzeichen nur an Mitglieder unseres Kurses vergeben.
Gibt es eine Möglichkeit, ein Thema vor der Allgemeinheit zu verbergen und es nur denen zugänglich zu machen, die es über einen Link anklicken?

Zweitens, wie kann dies mit dem Dfata Explorer Plugin gemacht werden?

Ich bin mir nicht ganz sicher, ob ich die von Ihnen verwendete Methode verstehe. Sie sollten vielleicht überprüfen, ob Sie die Einrichtung nicht verkomplizieren.

Wenn das Überprüfen von JSON nicht Ihr Ding ist, dann wäre eine Abfrage zur Suche nach post_id so etwas wie diese:

-- [params]
-- topic_id :topic_id
-- int :post_number

SELECT id
FROM posts
WHERE topic_id = :topic_id
  AND post_number = :post_number

Dann können Sie die URL des Beitrags verwenden, um die Topic-ID und die Beitragsnummer zu extrahieren und in die Parameterfelder einzugeben. z.B.: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (es ist erwähnenswert, dass der OP immer post_number 1 ist, auch wenn er nicht im Topic-Link enthalten ist)


Tatsächlich gibt es einen magischen Parameter, der die Suche nach einer post_id mit dem Data Explorer noch einfacher machen könnte…

-- [params]
-- post_id :url

SELECT id
FROM posts
WHERE id = :url

Fügen Sie die relevante URL für den Beitrag in das Parameterfeld ein, et voilà - es gibt die post_id aus :slight_smile:

1 „Gefällt mir“

Ich habe das gerade versucht, aber es wird keine ID ausgegeben. Es ist einfach leer:

Der rote Hintergrund lässt mich vermuten, dass es sich nicht um eine vollständige Beitrags-URL handelt. Wenn es sich um eine Themen-URL handelt, müssen Sie am Ende ein /1 hinzufügen:

https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1

1 „Gefällt mir“

Das hat funktioniert!

Ich gehe davon aus, dass dies durch die Beitrags-URL einschließlich ‘/1’ ersetzt werden muss?

Dieser Teil muss durch den Link ersetzt werden, auf den sie innerhalb des Beitrags klicken.

Und die post_id ist der Beitrag, in den der Link eingefügt/geteilt wird.

Ich verstehe, es gibt also keine Möglichkeit, das Abzeichen nur durch den Besuch des Beitragslinks zu verleihen?

Ich denke, das sollte es geben, aber das wäre eine andere Abfrage. :slight_smile: Diese hier vergibt eine Auszeichnung für das Klicken auf einen bestimmten Link in einem bestimmten Forenbeitrag.

Wenn Sie eine Auszeichnung für einen Benutzer vergeben möchten, der ein bestimmtes Thema besucht, denke ich, wäre es:

SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id

(Ersetzen Sie ‘728’ durch die relevante topic_id)

1 „Gefällt mir“

So ich habe es so eingerichtet:

Aber wenn ich den betreffenden Beitrag besuche (als Administrator), erhalte ich die Auszeichnung nicht. Mache ich hier etwas falsch?

Da der Auslöser „Update Daily“ benötigt wird, wird er beim nächsten Ausführen des täglichen Abzeichen-Grant-Jobs gewährt. Sie können Jobs::BadgeGrant manuell auf Ihrer /sidekiq/scheduler-Seite auslösen, wenn Sie ihn beschleunigen möchten, um ihn zu überprüfen.

1 „Gefällt mir“

Wie kann ich es sofort aktualisieren lassen?

Die einzig verfügbaren Auslöser sind:

  • Täglich aktualisieren
  • Wenn ein Benutzer einen Beitrag bearbeitet oder erstellt
  • Wenn ein Benutzer bearbeitet oder erstellt wird
  • Wenn ein Benutzer eine Aktion bei einem Beitrag ausführt
  • Wenn ein Benutzer bearbeitet oder erstellt wird
  • Wenn ein Benutzer die Vertrauensstufe ändert

Um eine sofortigere Auszeichnung zu erhalten, müssten Sie innerhalb der Grenzen dieser Aktionen arbeiten. Weitere Informationen finden Sie in diesem Thema - Creating triggered custom badge queries

2 „Gefällt mir“

Ich habe das getan, aber es wurde mir immer noch nicht gewährt.

FWIW, es funktioniert bei mir.

Haben Sie es aktiviert? Und haben Sie sichergestellt, dass die richtige Thema-Nummer eingestellt ist?

Ja, es ist aktiviert. Ich werde es in einem anderen Profil versuchen. Vielleicht liegt es daran, dass ich der Administrator bin.

Zweitens, fügen Sie den Thema-Link einfach in Ihren Browser ein?

Als Administrator macht das keinen Unterschied.

Sie müssten das Thema besuchen, damit es in der Tabelle topic_views, auf der diese Auszeichnung basiert, registriert wird.