Bien sûr, vous pouvez essayer quelque chose comme ceci dans l’onglet d’en-tête de votre thème/composant. J’ai laissé quelques commentaires dans l’extrait si vous souhaitez suivre. Vous pouvez les supprimer une fois que vous êtes prêt à l’utiliser.
Les mêmes règles s’appliquent. Si l’utilisateur est membre du groupe et que le groupe a des messages, Discourse naviguera vers la boîte de réception du groupe. Sinon, l’utilisateur atterrira sur le répertoire des membres.
<script type="text/discourse-plugin" version="0.8">
// Partie 1 : modifier le chemin des liens dans les cartes de groupe. Cela garantit que le titre du lien
// reflète où il mène et gère l'ouverture du lien dans un nouvel onglet.
const discourseComputed = require("discourse-common/utils/decorators").default;
api.modifyClass("component:group-card-contents", {
// La propriété groupPath est utilisée pour générer le href des liens de groupe
// dans la carte de groupe. Modifions-la
@discourseComputed("group")
groupPath(group) {
// obtenir la valeur par défaut du cœur
let groupURL = this._super(...arguments);
// si l'utilisateur correspond à notre exigence, modifier l'url pour qu'elle pointe vers la boîte de réception
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// retourner la valeur par défaut ou modifiée
return groupURL;
}
});
// Partie 2 : modifier le routage dans l'application. Cela garantit que la navigation normale dans l'application est
// gérée correctement et dirige l'utilisateur vers la boîte de réception du groupe s'il remplit les
// conditions requises
const DiscourseURL = require("discourse/lib/url").default;
const { groupPath } = require("discourse/lib/url");
const { action } = require("@ember/object");
api.modifyClass("controller:user-card", {
// showGroup est ici une action qui appartient au contrôleur user-card.
// C'est ce qui est appelé lorsque vous cliquez sur le nom/avatar du groupe à l'intérieur des cartes de groupe
@action
showGroup(group) {
// appeler super pour s'assurer que le code du cœur est chargé en premier
this._super(...arguments);
// group path est une fonction d'aide d'URL Discourse intégrée
let groupURL = groupPath(group.name);
// si l'utilisateur correspond aux exigences, modifier l'url
if (group.is_group_user && group.has_messages) {
groupURL = `${groupURL}/messages/`;
}
// appeler routeTo() avec l'url de groupe par défaut ou modifiée
DiscourseURL.routeTo(groupURL);
}
});
</script>