Composants personnalisés -- ajouter un bouton ou du texte à n'importe quelle sortie de plugin

:information_source: Résumé Ajouter un bouton ou du texte n’importe où
:hammer_and_wrench: Dépôt https://github.com/literatecomputing/discourse-custom-components
:question: Guide d’installation Comment installer un thème ou un composant de thème
:open_book: Nouveau dans les thèmes Discourse ? Guide du débutant pour utiliser les thèmes Discourse

Installer ce composant de thème

Ajoute un bouton de lien ou du texte arbitraire à n’importe quelle sortie de plugin. (Ignorez les filigranes dans les images–j’ai pris ces captures d’écran sur un site de staging/test.)

Pour voir où se trouvent les sorties de plugin, utilisez Introducing Discourse developer toolbar pour les trouver. Si vous ne savez pas ce qu’est une sortie de plugin, vous pouvez consulter Using Plugin Outlet Connectors from a Theme or Plugin, mais ce composant vous permet, avec quelques restrictions, d’insérer du texte dans n’importe quelle sortie de plugin sans faire de programmation ou sans vraiment comprendre ce qu’est une sortie de plugin.

J’ai commencé à développer ce plugin pour quelqu’un qui voulait afficher un bouton « cliquez sur ce bouton pour vous abonner afin de pouvoir envoyer des MP » sur les profils d’utilisateurs et les cartes d’utilisateur. Il voulait que le bouton s’affiche si l’utilisateur ne pouvait pas envoyer de MP. Comme je ne suis pas toujours aussi intelligent que je le pense, j’ai écrit le composant en utilisant des groupes pour déterminer si le bouton était affiché. Un problème avec cette approche était que les membres du personnel n’étaient pas dans le groupe d’abonnés, ils voyaient donc le bouton « vous devez vous abonner » même s’ils pouvaient envoyer des MP. De plus, le groupe était masqué, il était donc impossible de l’utiliser dans un composant de thème de toute façon. J’ai réécrit ce composant de thème pour utiliser currentUser.can_send_private_messages afin de déterminer s’il fallait afficher le bouton.

À qui s’adresse ceci ?

Si vous souhaitez placer un bouton avec un lien dedans, ou du texte arbitraire affiché ou masqué pour certains groupes, cela vous permettra de les insérer à n’importe quelle sortie de plugin. Vous voulez ajouter un lien « Vous devez vous abonner » entre chaque message, sauf pour ceux qui ne sont pas membres ? Ceci le fera. Vous voulez coller du HTML arbitraire à une sortie de plugin, juste pour voir à quoi cela ressemblera ? Ceci le fera.

Comment cela aide les développeurs

Ce thème contient quelques exemples simples sur la façon de :

mais si vous essayez de le faire à l’intérieur d’un <template> à l’intérieur d’un fichier .gjs, cela fonctionne un peu différemment (comme {{htmlSafe component.text}})

15 « J'aime »

L’espace rend le texte non gras.


Excellent composant !

5 « J'aime »

Serait-il possible d’ajouter des espaces réservés aux URL des boutons, par exemple pour que l’URL contienne l’ID du sujet dans lequel l’utilisateur se trouve ?

Je ne suis pas tout à fait sûr. Si vous avez un budget, je regarderai.

Que ferait votre bouton s’il avait l’ID du sujet ?

Si vous trouvez une solution et souhaitez soumettre une PR, je l’accepterai probablement.

Je suis à peu près sûr que la réponse est non, mais que vous pourriez utiliser la solution de contournement décrite ici

2 « J'aime »

Salut @pfaffman

Nous voulons ajouter un ensemble de boutons à chaque sujet pour les membres de notre groupe d’utilisateurs de compte professionnel.
Le bouton déclencherait alors la création d’un nouveau MP qui inclurait l’URL actuelle sur laquelle l’utilisateur se trouve.

De cette façon, nos clients professionnels peuvent nous envoyer des demandes pour épingler, mettre en évidence ou « parrainer » des sujets spécifiques.

1 « J'aime »

Comme vous le savez, vous pouvez créer une URL qui ouvrira un nouveau compositeur de sujet. Vous pourriez faire en sorte que ce soit le lien ajouté par le composant de thème.

Je ne pense pas qu’il soit possible de le faire sans ajouter de code au composant de thème (mais peut-être que si ?). Peut-être que quelqu’un a une idée à ce sujet et proposera cette solution ici (ou sur l’autre sujet). Sinon, vous pouvez me contacter ou poster dans Marketplace avec la description de ce dont vous avez besoin et un budget.

3 « J'aime »