Sicher, Sie können so etwas im Header-Tab Ihres Themes/Komponenten versuchen. Ich habe einige Kommentare im Snippet hinterlassen, falls Sie mitverfolgen möchten. Sie können diese löschen, sobald Sie bereit sind, es zu verwenden.
Es gelten die gleichen Regeln. Wenn der Benutzer Mitglied der Gruppe ist und die Gruppe Nachrichten hat, navigiert Discourse zur Gruppennachrichtenzentrale. Andernfalls landet der Benutzer im Mitgliederverzeichnis.
<script type="text/discourse-plugin" version="0.8">
// Teil 1: Ändern Sie den Pfad für die Links in den Gruppenkarten. Dies stellt sicher, dass der Linktitel widerspiegelt, wohin er führt, und behandelt das Öffnen des Links in einem neuen Tab.
const discourseComputed = require("discourse-common/utils/decorators").default;
api.modifyClass("component:group-card-contents", {
// Die Eigenschaft groupPath wird verwendet, um die href für die Gruppenlinks
// in der Gruppenkarte zu generieren. Lassen Sie uns diese modifizieren
@discourseComputed("group")
groupPath(group) {
// Holen Sie sich den Standardwert aus dem Kern
let groupURL = this._super(...arguments);
// Wenn der Benutzer unsere Anforderung erfüllt, modifizieren Sie die URL, damit sie zur Nachrichtenzentrale führt
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// Geben Sie entweder den Standard- oder den modifizierten Wert zurück
return groupURL;
}
});
// Teil 2: Ändern Sie das In-App-Routing. Dies stellt sicher, dass die normale In-App-Navigation
// korrekt gehandhabt wird und der Benutzer zur Gruppennachrichtenzentrale geleitet wird, wenn er die
// Anforderungen erfüllt
const DiscourseURL = require("discourse/lib/url").default;
const { groupPath } = require("discourse/lib/url");
const { action } = require("@ember/object");
api.modifyClass("controller:user-card", {
// showGroup ist hier eine Aktion, die zum User-Card-Controller gehört.
// Dies wird aufgerufen, wenn Sie auf den Gruppennamen / Avatar innerhalb von Gruppenkarten klicken
@action
showGroup(group) {
// Rufen Sie super auf, um sicherzustellen, dass der Code aus dem Kern zuerst geladen wird
this._super(...arguments);
// groupPath ist eine integrierte Discourse-URL-Hilfsfunktion
let groupURL = groupPath(group.name);
// Wenn der Benutzer die Anforderungen erfüllt, modifizieren Sie die URL
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// Rufen Sie routeTo() entweder mit der Standard- oder der modifizierten groupURL auf
DiscourseURL.routeTo(groupURL);
}
});
</script>