Section des messages pour la barre latérale

:information_source: Résumé Ajoute des liens vers les boîtes de réception de messages personnels et de groupe dans la barre latérale, y compris les indicateurs de messages non lus
:eyeglasses: Aperçu Theme Creator
:hammer_and_wrench: Dépôt GitHub - moin-Jana/sidebar-messages-section: Adds personal and group message inbox links to the sidebar, including unread message indicators. · GitHub
:question: Guide d’installation Comment installer un thème ou un composant de thème
:open_book: Nouveau sur les thèmes Discourse ? Guide pour les débutants sur l’utilisation des thèmes Discourse

Installer ce composant de thème

Le composant ajoute une section Messages à la barre latérale avec des liens vers les boîtes de réception de messages personnels — à la fois la boîte de réception personnelle de l’utilisateur et toutes les boîtes de réception de groupe auxquelles il a accès. La section inclut également un bouton pour rédiger un nouveau message personnel à côté du titre de la section.

Boîte de réception personnelle

Par défaut, le composant ajoute un lien vers la boîte de réception personnelle pour tous les utilisateurs. Grâce au paramètre show_personal_inbox, les administrateurs peuvent également le masquer entièrement ou l’afficher uniquement pour les utilisateurs autorisés à créer des messages privés, selon le paramètre du site « Groupes autorisés aux messages privés ». Cela reflète l’apparence du lien vers la boîte de réception personnelle dans le menu de notifications, le profil de l’utilisateur et la section Communauté de la barre latérale.

:bulb: Pour éviter les liens dupliqués vers la boîte de réception personnelle, vous pouvez supprimer le lien Messages dans la première section de la barre latérale. Pour ce faire, ouvrez le menu Plus et sélectionnez Personnaliser cette section, puis supprimez le lien Messages de la section.

Boîtes de réception de groupe

Toutes les boîtes de réception de groupe contenant au moins un message et dont l’utilisateur est membre apparaîtront automatiquement dans sa barre latérale. Les administrateurs peuvent masquer des boîtes de réception de groupe spécifiques en utilisant le paramètre hide_group_inboxes, ce qui peut être utile lorsqu’une boîte de réception de groupe n’est plus activement utilisée.

Un paramètre distinct, use_group_page_inbox, vous permet de choisir si les liens vers les boîtes de réception de groupe s’ouvrent dans l’interface de messages de l’utilisateur (/my/messages/group/{group_name}) ou sur la page du groupe (/g/{group_name}/messages/inbox).

Indicateur de non-lu

Chaque lien vers une boîte de réception affiche l’état actuel des messages en fonction de la préférence de l’utilisateur pour « Afficher un compteur des nouveaux éléments » : soit un point, soit le compteur numérique. Les valeurs supérieures à 100 sont affichées sous la forme 99+.

Configuration avancée des boîtes de réception de groupe

Pour personnaliser l’ordre des boîtes de réception de groupe ou modifier le nom affiché dans la barre latérale, vous pouvez utiliser le paramètre advanced_group_inbox_configuration.

Dans ce paramètre, vous pouvez :

  • sélectionner un groupe dans une liste déroulante
  • définir optionnellement un nom personnalisé qui sera affiché dans la barre latérale
  • réorganiser les groupes configurés à l’aide des boutons en bas

Le nom personnalisé est également utile au sein du paramètre lui-même.
Si aucun nom n’est fourni, l’entrée sera libellée groupe 1, groupe 2, etc. (en fonction de sa position). Ajouter un nom temporaire peut faciliter la réorganisation, et vous pouvez le supprimer avant d’enregistrer si vous le souhaitez.

Les groupes ayant des messages qui ne sont pas ajoutés à la configuration avancée apparaîtront toujours dans la barre latérale, listés après ceux configurés et ordonnés selon leur ID de groupe.

Les groupes répertoriés dans le paramètre hide_group_inboxes seront toujours masqués, indépendamment du fait qu’ils soient également présents dans la configuration avancée ou qu’ils contiennent des messages. Un avertissement réservé aux administrateurs aide à souligner lorsqu’un groupe est ajouté aux deux paramètres.

Vous pouvez voir un exemple de configuration et son impact sur l’ordre et les noms affichés dans les captures d’écran ci-dessous :


Position de la section Messages

Pour modifier la position de la section Messages, vous pouvez soit utiliser du CSS, par exemple :

Sinon, vous pouvez installer le composant Discourse Sidebar Menu Reorder et utiliser inbox-section comme nom de section lors de l’ajustement de sa position. Vous pouvez également utiliser le paramètre d’ordre du composant Navigation (sidebar) menu display control.

17 « J'aime »

Bravo, bien joué Moin ! :clap: :tada:

4 « J'aime »

Suggestion mineure : peut-être que javascripts/discourse/api-initializers/group-inboxes-in-sidebar.gjs devrait être un fichier JS au lieu de GJS ?

Excellent composant !


J’ai passé les 10 dernières minutes à parcourir le code et à examiner les classes principales et je dois dire à quel point Discourse a été (et est) conçu de manière remarquable pour que tout s’intègre si bien.

2 « J'aime »

Oui, l’API offre presque tout ce dont vous avez besoin pour que la section ressemble et fonctionne comme toutes les autres. Le chat l’utilise également, ce qui a probablement influencé le développement. Les fonctionnalités ont été développées en même temps.
Malheureusement, get badgeText(), qui affiche le nombre de sujets non lus dans les sections principales, n’est pas pris en charge, j’ai donc dû faire preuve d’un peu de créativité avec les chiffres.

4 « J'aime »

Je n’ai pas trouvé de paramètre d’administrateur pour cela, donc PSA, ceci le masquera via CSS :

.sidebar-section-link[data-link-name="my-messages"] {
    display: none;
}
2 « J'aime »

Pourquoi préférez-vous que le lien soit masqué avec du CSS au lieu d’utiliser l’option existante pour les administrateurs afin de personnaliser la barre latérale ? Masquer avec du CSS semble plus susceptible de casser que d’utiliser les options intégrées de Discourse.

2 « J'aime »

Derp, vous avez raison. Je réfléchissais trop, pensant que ce serait un paramètre dans la console d’administration et/ou une fonctionnalité de base.

1 « J'aime »

Vous n’êtes pas le seul à regarder là. :joy:


C’est un composant adorable !

2 « J'aime »

J’ai développé la note :

5 « J'aime »

Oui, vous l’avez fait. Mais en tant qu’administrateurs, nous avons souvent l’habitude de passer par le panneau d’administration. :wink:. Ainsi, lorsque nous parcourons les instructions en diagonale, nous pouvons négliger certains détails.

Même avec les mises à jour du noyau, je suis sûr que beaucoup d’entre nous ne lisent pas toujours tous les détails jusqu’à ce que quelque chose que nous utilisons ait été déplacé vers une autre zone.

Il y a de cela très, très longtemps, avec Android, si ma mémoire est bonne, Gingerbread avait Nav et Maps. J’ai passé environ 10 minutes à chercher Nav après qu’ils l’aient fusionné avec Maps dans une mise à jour. :joy:

C’est un excellent Composant de Thème qui convient aux sites qui s’appuient fortement sur les Messages ! Merci @moin pour votre excellent travail !

Afin de l’améliorer encore pour ceux qui utilisent beaucoup les Groupes (les Messages en sont une composante majeure), pourriez-vous envisager ces suggestions ?

Position sélectionnable dans la barre latérale

Afin de mettre davantage l’accent sur les Messages dans l’interface utilisateur, je voudrais qu’ils soient en haut de la barre latérale (c’est-à-dire juste en dessous des liens). En gros, je veux que les gens puissent voir facilement leurs Messages récents (par groupe) en un coup d’œil sans dépendre des notifications.

J’ai utilisé ce CSS pour y parvenir, mais je soupçonne que je ne suis pas le seul pour qui cela serait utile :

/* Assurez-vous que la section Messages apparaît en premier dans le conteneur flexbox */
.sidebar-section-wrapper {
  order: 1;
}
.sidebar-section-wrapper[data-section-name="inbox-section"] {
  order: 0;
}

Ouvrir les boîtes de réception de groupe dans le contexte du groupe

Je veux que mes utilisateurs puissent facilement trouver et interagir avec leur(s) Groupe(s). Il me semble logique qu’ils travaillent avec les Messages dans la Boîte de réception à laquelle on accède depuis la page du Groupe (c’est-à-dire /g/le-groupe/messages/inbox) au lieu de leur page de Boîte de réception Personnelle (c’est-à-dire /my/messages/group/le-groupe)

Cela leur donne une belle page propre centrée sur le groupe, avec un accès facile aux autres membres du groupe et aux paramètres :

Ce serait génial si cela était régi par un paramètre dans le CT.

3 « J'aime »

J’y ai réfléchi, quant à savoir quelle voie est un meilleur défaut et un paramètre, mais je l’ai supprimé pour une raison dont je ne me souviens plus pour l’instant. Je vais regarder demain plus tard. Je pense que cela concernait l’indicateur de message non lu. Préféreriez-vous toujours cette voie si la conséquence était qu’il n’y aurait pas d’indicateur pour les messages non lus ?

Je pense que la position actuelle est la même que celle de la section des messages qui était dans le cœur.
Il existe déjà un excellent composant concernant la modification de l’ordre des sections dans la barre latérale : Navigation (sidebar) menu display control
Pour éviter les conflits car les deux composants tentent de remplacer l’ordre, il pourrait être judicieux que les administrateurs qui souhaitent un ordre différent utilisent le composant existant (l’auteur a confirmé que cela fonctionne en utilisant « inbox-section » comme nom de section).
Je devrai voir si je peux proposer un paramètre supplémentaire pour cela. Dans tous les cas, je veux éviter que les composants n’interfèrent les uns avec les autres.

2 « J'aime »

J’ai joué avec cela dans ma fourche, et j’ai trouvé la même chose. Cela fonctionne, mais perd à la fois l’indicateur de message non lu et la mise en surbrillance du lien dans la barre latérale. Ces deux choses ont en effet une grande valeur !

J’ai fait une demande de tirage (PR) pour là où j’en suis arrivé :

Mais pour vraiment décoller, il faut vraiment que l’indicateur de message non lu et la mise en surbrillance du lien fonctionnent, n’est-ce pas ?

Point bien soulevé ! C’est une bien meilleure idée. À ma honte, je suis en fait l’un des auteurs de ce TC !

1 « J'aime »

Pourquoi avez-vous utilisé href au lieu de route ? Je pense que href ne fonctionnait pas du tout avec les indicateurs de non-lu. J’étais plus préoccupé par le fait que les nombres sur la route group.messages.inbox n’étaient pas disponibles de la manière dont vous pouvez les utiliser à userPrivateMessages.

1 « J'aime »

Parce que je suis un développeur nul et que j’ai essayé plein de choses jusqu’à ce que quelque chose fonctionne ! C’est probablement aussi dû à ma dépendance malsaine à une IA générative pas très intelligente :wink:.

J’ai essayé d’utiliser des routes, mais je n’ai pas réussi à les faire remplacer les routes existantes. Alors j’ai abandonné.

Je me suis demandé s’il était possible d’obtenir ces chiffres ou ce comportement en détournant simplement le lien pour aller vers un autre emplacement. Mais c’est un peu trop complexe pour moi, le vieux simplet.

N’hésitez pas à l’améliorer !

(Au passage, le formidable @moin a exactement fait cela, en ajoutant la fonctionnalité et en faisant que tout fonctionne correctement !)

3 « J'aime »

Cela fonctionne effectivement très bien. De manière un peu embarrassante, je suis l’un des auteurs (très secondaire par rapport à @lilly) de ce TC :flushed_face: !

Ce serait formidable de l’avoir dans le message initial (OP).

2 « J'aime »

@nathank a demandé une option pour changer l’ordre des boîtes de réception de groupe dans la barre latérale. J’ai précédemment demandé des idées sur la meilleure façon d’aborder cela dans Configuring the order of groups in theme component settings, et je pense être arrivé à une solution.

J’ai combiné cela avec la demande d’afficher le nom complet d’un groupe au lieu de son nom court. Comme le nom complet n’est pas facilement disponible dans ce contexte, la solution consiste à permettre aux administrateurs de définir un nom d'affichage personnalisé à la place. Le champ qui aurait auparavant été utilisé uniquement pour afficher le nom du groupe dans la configuration est maintenant également utilisé pour contrôler le nom affiché dans la barre latérale.

Les deux fonctionnalités sont gérées via le nouveau paramètre advanced_group_inbox_configuration.

Dans ce paramètre, vous pouvez :

  • sélectionner un groupe dans un menu déroulant
  • définir éventuellement un nom personnalisé qui sera affiché dans la barre latérale
  • réorganiser les groupes configurés à l’aide des boutons en bas

Le nom personnalisé est également utile à l’intérieur du paramètre lui-même.
Si aucun nom n’est fourni, l’entrée sera étiquetée comme groupe 1, groupe 2, etc. (en fonction de sa position). L’ajout d’un nom temporaire peut faciliter la réorganisation, et vous pouvez le supprimer à nouveau avant d’enregistrer si vous le souhaitez.

Les groupes avec des messages qui ne sont pas ajoutés à la configuration avancée apparaîtront toujours dans la barre latérale, listés après ceux configurés et ordonnés par leur ID de groupe.
Les groupes listés dans le paramètre hide_group_inboxes seront toujours masqués, qu’ils soient également présents dans la configuration avancée ou qu’ils aient des messages.


Dans cet exemple, aucun nom personnalisé n’a été saisi pour le groupe modérateur, c’est pourquoi il apparaît comme groupe 1 dans la configuration. Les autres groupes ont des noms personnalisés.

Cette configuration donne :


Ici, vous pouvez voir que les boîtes de réception ‘doggo-daily’ et ‘cat_pics’ ont échangé leurs positions et sont affichées sans tirets ni underscores. La boîte de réception ‘Team’ apparaît en dessous de celles configurées dans le paramètre avancé.
Vous pouvez également voir un avertissement réservé aux administrateurs, qui apparaît parce que le groupe ‘admin’ a été ajouté à la configuration avancée et au paramètre hide_group_inboxes en même temps.

5 « J'aime »

C’est maintenant tout simplement brillant pour ceux qui utilisent les groupes pour les communications. Excellent travail, @Moin !

Merci d’avoir écouté et de vous être activement engagé avec les commentaires des autres (et les miens) - et d’avoir produit un composant de thème si bien conçu et pragmatique qui résout un problème de longue date avec tant d’élégance.

3 « J'aime »

Bonjour @Moin, excellent travail et merci beaucoup.

Je demandais si une fonctionnalité, surtout lorsque vous travaillez avec beaucoup de groupes, pouvait faire partie de ce plugin : La vue combinée de tous les messages de groupe. Dans la vue PN, il existe déjà un moyen de visualiser avec un petit badge que ce message va également dans le groupe, pourquoi ne pas afficher tous les messages avec des badges auxquels le groupe appartient :

Je ne pense pas que cela s’intégrerait bien dans ce composant de thème. L’objectif de ce composant est très étroit : il ajoute une section de messages à la barre latérale. Je ne suis pas favorable à un composant qui prend en charge des fonctionnalités complètement différentes, car cela rend la compréhension et la maintenance plus difficiles. Ce type de fonctionnalité serait mieux géré comme une personnalisation distincte.

Plus important encore, ce n’est pas vraiment quelque chose pour lequel un composant de thème est bien adapté. Les composants de thème ne peuvent fonctionner qu’avec des données déjà présentes sur le frontend, ou qui peuvent être raisonnablement récupérées à partir des points de terminaison backend existants. C’est pourquoi ce composant peut afficher les boîtes de réception de groupe dans la barre latérale : de nombreuses parties de Discourse ont déjà besoin de savoir à quels groupes un utilisateur appartient, donc cette information est facilement disponible.

Cependant, ce que vous décrivez nécessiterait un accès aux données de messages dans toutes les boîtes de réception de groupe. Discourse n’expose pas cela actuellement en un seul endroit. Un composant de thème pourrait théoriquement récupérer chaque boîte de réception de groupe une par une, mais cela devient rapidement inefficace. Chaque requête ne renvoie que les 30 premiers messages, vous auriez donc besoin de charger plusieurs pages par boîte de réception. Pour ensuite trier les messages par activité, vous auriez effectivement besoin de tous les messages de toutes les boîtes de réception en même temps.

En raison de ces limitations, un composant de thème serait un mauvais choix ici. Un plugin qui ajoute un point de terminaison backend approprié pour renvoyer ces données serait une approche beaucoup plus sensée et évolutive.

4 « J'aime »