Estoy intentando crear un plugin que logre lo siguiente:
Junto a los campos del compositor, hay un nuevo botón “buscar”.
Al hacer clic en el botón, aparece una superposición con un formulario de búsqueda.
El formulario de búsqueda permite al usuario introducir algunos términos de búsqueda (digamos, el nombre de una ciudad) y se activa una búsqueda con un motor de búsqueda de imágenes propietario (que se ejecuta en mi propia URL y requiere una clave API) para buscar imágenes de esa ciudad.
Se muestran al usuario las 5 mejores imágenes. El usuario selecciona una imagen, la superposición desaparece, la imagen más la cadena de búsqueda se añaden al compositor como un borrador. El usuario puede continuar escribiendo lo que sea que fuera su publicación.
Mi caso de uso real es un poco más complicado, pero eso es, en general, lo que quiero lograr. El objetivo es simplemente ayudar al usuario a crear borradores de publicaciones con imágenes de forma mucho más conveniente que ir al motor de búsqueda y copiar manualmente una imagen en el compositor para crear un borrador.
Ya he conseguido crear un plugin con un nuevo botón utilizando el campo del compositor como conector. El botón se puede hacer clic y activa una acción. Pero ahora estoy atascado.
Algunas preguntas:
¿Hay algún plugin que me facilite la vida? Estaba pensando quizás en el plugin Pavilion wizard, pero he visto que hacer llamadas a una API solo viene con la versión de pago, y ahora mismo es demasiado pronto para mí para decidir si vale la pena gastar dinero en esto.
¿Cuál es la clase CSS / ID de div correcta a la que podría dirigirme para activar una superposición?
¿Cuál sería un buen ejemplo para averiguar cómo hacer una llamada a una API a través del backend? No quiero dar la clave API del motor de búsqueda al cliente, así que debe pasar por el backend.
No estoy seguro de cuál es la API del plugin y si la necesitaría. (Me cuesta un poco con la documentación que está por todas partes).
Todos los demás consejos y sugerencias son bienvenidos.
Mientras tanto, encontré algunos recursos que me parecieron informativos. Realmente desearía que estos se pudieran colocar de manera más destacada en el tutorial “Cómo escribir un plugin”. Para los principiantes, no es obvio que existan.
La propia API de Discourse (no es útil para escribir plugins, pero sigue siendo relevante para principiantes): https://docs.discourse.org/
También entendí que la API de Plugin de Backend es esencialmente Rails o Ruby, pero no está claro cómo interactúan exactamente el frontend y el backend, o dónde está el “gancho” inicial para el backend. Claro, hay un plugin.rb para colocar, pero me pregunto si hay alguna documentación sobre cuál es el punto de entrada a este archivo. Quizás eso sea totalmente obvio para los programadores de Ruby on Rails, pero yo no soy uno de ellos, así que es una entrada difícil aquí.
No parece que necesites ningún cambio en el backend. El comportamiento que describes es muy similar a cómo funciona nuestro modal “Insertar hipervínculo”: puedes buscar temas, seleccionar uno de ellos para añadirlo como enlace y se añadirá un enlace al compositor cuando confirmes.
Puedes añadir el botón a un plugin outlet, o a la barra de herramientas a través de un api.onToolbarCreate añadido a un inicializador, y abrir un modal de forma similar a como lo hacemos para el modal “Insertar hipervínculo”. Es capaz de addText al compositor aprovechando el objeto toolbarEvent de la acción de la barra de herramientas (si necesitas un outlet, también puedes interactuar con el compositor a través de los disparadores de appEvents).
Gracias, eso es muy útil. Sí, un modal parece ser lo que estoy buscando: interrumpe el flujo del usuario y solo cuando el usuario completa el modal, las cosas vuelven al estado anterior. Echaré un vistazo a cómo funciona el modal Insertar hipervínculo.
Pregunta: ¿Dónde puedo encontrar la documentación de DModal, DButton y otros objetos específicos de Discourse?