J’essaie de créer un plugin qui réalise ce qui suit :
À côté des champs de composition, il y a un nouveau bouton « rechercher ».
Lorsque l’on clique sur le bouton, une superposition apparaît avec un formulaire de recherche.
Le formulaire de recherche permet à l’utilisateur de saisir des termes de recherche (disons, le nom d’une ville), et une recherche avec un moteur de recherche d’images propriétaire (fonctionnant sous ma propre URL qui nécessite une clé API) est déclenchée pour rechercher des images de cette ville.
Les 5 meilleures images sont présentées à l’utilisateur. L’utilisateur sélectionne une image, la superposition disparaît, l’image plus la chaîne de recherche sont ensuite ajoutées dans le compositeur sous forme de brouillon. L’utilisateur peut alors continuer à écrire ce qu’il voulait poster.
Mon cas d’utilisation réel est un peu plus compliqué, mais c’est à peu près ce que je veux réaliser. L’objectif est simplement d’aider l’utilisateur à créer des brouillons de messages avec des images de manière beaucoup plus pratique que d’aller sur le moteur de recherche et de copier manuellement une image dans le compositeur pour créer un brouillon.
J’ai déjà réussi à créer un plugin avec un nouveau bouton en utilisant composer-field comme connecteur. Le bouton peut être cliqué et déclenche une action. Mais maintenant, je suis bloqué.
Quelques questions :
Existe-t-il des plugins qui me faciliteraient la tâche ? Je pensais peut-être au plugin Pavilion wizard, mais j’ai vu que les appels à une API ne sont disponibles qu’avec la version payante, et pour l’instant, il est trop tôt pour moi de décider si cela vaut la peine de dépenser de l’argent pour cela.
Quelle est la bonne classe CSS / ID de div que je pourrais cibler pour activer une superposition ?
Quel serait un bon exemple pour comprendre comment effectuer un appel API via le backend ? Je ne veux pas donner la clé API du moteur de recherche au client, donc cela doit passer par le backend.
Je ne suis pas sûr de ce qu’est réellement l’API du plugin et si j’en aurais besoin. (Je lutte un peu avec la documentation qui est partout.)
Tous les autres conseils et astuces sont les bienvenus.
En attendant, j’ai trouvé quelques ressources que j’ai trouvées instructives. J’aimerais vraiment que celles-ci soient mises plus en évidence dans le tutoriel « Comment écrire un plugin ». Pour les débutants, il n’est pas évident qu’elles existent même.
L’API propre à Discourse (pas utile pour écrire des plugins, mais toujours pertinente pour les débutants) : https://docs.discourse.org/
J’ai également compris que l’API des plugins backend est essentiellement Rails ou Ruby - mais il n’est pas clair comment exactement le frontend et le backend interagissent entre eux, ni où se trouve le « hook » initial pour le backend. Bien sûr, il y a un plugin.rb à placer, mais je me demande s’il existe une documentation sur le point d’entrée de ce fichier. C’est peut-être tout à fait évident pour les programmeurs Ruby on Rails, mais je n’en suis pas un, donc c’est une entrée difficile ici.
Il ne semble pas que vous ayez besoin de modifications backend. Le comportement que vous décrivez est très similaire au fonctionnement de notre modalité « Insérer un hyperlien » – vous pouvez rechercher des sujets, en sélectionner un à ajouter comme lien, et un lien sera ajouté à l’éditeur lorsque vous confirmez.
Vous pouvez ajouter le bouton à un point de sortie de plugin, ou à la barre d’outils via un api.onToolbarCreate ajouté à un initialiseur, et ouvrir une modalité de manière similaire à la façon dont nous le faisons pour la modalité « Insérer un hyperlien ». Il est capable d’ajouter du texte à l’éditeur en exploitant l’objet toolbarEvent de l’action de la barre d’outils (si vous avez besoin d’un point de sortie, vous pouvez également interagir avec l’éditeur via les déclencheurs appEvents).
Merci, c’est très utile. Oui, une modale semble en effet être ce que je cherche : elle interrompt le flux de l’utilisateur, et ce n’est qu’une fois que l’utilisateur a terminé la modale que les choses reviennent à l’état précédent. Je vais regarder comment fonctionne la modale d’insertion de lien hypertexte.
Question : Où puis-je trouver la documentation pour DModal, DButton et d’autres objets spécifiques à Discourse ?