Je souhaite modifier du code HTML de base dans un plugin que je teste (il serait pratique de regrouper toutes les modifications dans un seul plugin). Ce serait du HTML que j’ajouterais dans la section header du personnalisateur de thème sur le tableau de bord d’administration, si j’utilisais ce tableau de bord au lieu d’un plugin.
Dans un thème, vous auriez simplement un dossier direct nommé common, qui contiendrait les différents fichiers, tels que header.html.
Je sais que les feuilles de style communes pour un plugin peuvent être placées dans plugin/assets/stylesheets/common. Où devrais-je placer ce fichier header.html dans un plugin ?
Les scripts sont généralement placés dans un initialiseur ou déclenchés par un événement dans un composant.
Les appels à l’API du plugin doivent être placés dans l’initialiseur.
Les modifications apportées aux modèles sont probablement rattachées à un connecteur de plugin (ou, en dernier recours, uniquement : en les remplaçant dans le dossier des modèles).
Vous pouvez également décorer ou rouvrir des widgets dans l’initialiseur.
Vous ne devriez pas avoir besoin d’insérer du « html brut » nulle part, après tout, ce que vous modifiez réellement est une application web, et non une page web ?
En tout cas, il n’y aura aucun inconvénient particulier à exécuter plusieurs plugins et TCs côte à côte …
Nous intégrons régulièrement du nouveau HTML dans les thèmes et le personnalisateur. Je souhaite ajouter cela à mon extension (plutôt qu’à un thème) afin de disposer d’une base de code unique.
Où placer le HTML dans une extension là où, si vous créiez un thème, vous l’auriez mis dans le fichier « header » du dossier commun ?
Pour le CSS, l’équivalent dans un plugin est [plugin]/assets/stylesheets/common/[file.scss]
En suivant ce format, j’ai essayé d’ajouter un fichier à [plugin]/assets/views/layouts/common/header.html, mais cela n’a pas fonctionné (ajouter views/header.html non plus).
Je peux modifier les modèles, mais pour de simples changements HTML comme nous le faisons dans les thèmes, il serait pratique de pouvoir effectuer une modification HTML simple dans header.html (ou l’équivalent). Par exemple, où placeriez-vous ce qui suit dans un plugin (qui gère déjà des opérations complexes côté serveur, d’où la nécessité d’un plugin) :
Je trouve aussi déroutantes les différences de mise en œuvre entre un plugin et un thème pour ce genre de choses. Vous pourriez contourner le problème en utilisant un composant de thème, mais il semble que vous cherchiez la meilleure solution plutôt que la plus rapide. (bien qu’il y ait certains avantages à séparer ces éléments pour une maintenance distincte)
Je pense que vous devez ajouter une ligne dans le fichier plugin.rb pour inclure le fichier souhaité. Ce que je fais, c’est cloner un dépôt du GitHub de Discourse appelé all-the-plugins et y rechercher un exemple avec grep.
Cool. Merci. Oui, j’ai pensé que la situation est effectivement qu’il n’existe pas actuellement de moyen simple d’apporter des modifications HTML dans un plugin comme on le ferait dans un thème — pour modifier le HTML, il faut accéder aux modèles/connecteurs d’un plugin (pas trop compliqué, mais différent de la mentalité plus simple des thèmes avec common/header.html).
Je vais examiner plugin.rb pour voir si c’est actuellement plus simple que de suivre la voie normale des modèles/composants.
Ce n’est pas à l’endroit que j’ai mentionné, mais vous l’ajoutez dans l’arborescence des assets avec le bon nom. C’est impossible à comprendre tant qu’on ne l’a pas saisi, et une fois que c’est le cas, c’est totalement évident.
Édition : Salut @JQ331. Je viens de réaliser que je pense avoir fait ce que vous voulez dans un plugin hier, mais je suis si mauvais que je n’ai pas réalisé que c’est ce que vous cherchiez. Voir GitHub - literatecomputing/discourse-max-topics-per-month · GitHub. C’est très simple, donc il n’y a pas grand-chose qui puisse empêcher de trouver l’exemple.