Gracias por señalarlo, @NateDhaliwal
No, simplemente examina la URL en busca de una cadena específica y rellena previamente el compositor con una de varias plantillas cuando encuentra esa cadena.
El complemento Docus inserta esa cadena en las URL como una de sus funciones, pero este componente funcionará con cualquier cadena o mecanismo de entrega que alguien quiera usar, por lo que puede funcionar de forma independiente. Actualizaré la documentación para explicarlo.
Por ejemplo, podrías indicarle que busque: /tag/introductions y se convertiría en un componente de plantilla de etiqueta. O podrías usarlo como yo para insertar esa plantilla en intersecciones de etiquetas, como: tags/intersection/introductions/webdevs
Moveré la cadena que busca a la sección de administración para que sea más fácil de modificar y usar para otros sin tener que rebuscar en el código.
Para ser sincero, he estado luchando con un error en esto durante los últimos días y me he estado arrancando (el poco pelo que me queda) y probablemente no debería haberlo compartido todavía. Siempre inserta una plantilla cuando encuentra esa cadena en la URL.
A veces quieres que se active cada vez que encuentra esa cadena, a veces solo quieres que se active si no hay otros hilos ya existentes, y a veces solo quieres que se active si ese usuario específico aún no ha creado un hilo en esa ubicación.
Lo que está sucediendo ahora:
El inicializador vigila una etiqueta/cadena en la URL y abre automáticamente una plantilla en Discourse cada vez que ve una coincidencia. Eso funciona bien cuando siempre quiero abrir una plantilla, pero se desmorona cuando necesito condiciones como “no abrir si ya existe algún tema” o “no abrir si este usuario ya ha publicado”.
Lo que he intentado:
- Introduje una bandera
settings.auto_open_check_user_only. Cuando está activada, el código buscatags:tag1+tag2 @username; cuando está desactivada, solo buscatags:tag1+tag2. El objetivo era distinguir entre “existe cualquier tema” y “existe el tema de este usuario”. - Añadí un retraso de 500 ms antes de volver a activar el guardado de borradores para evitar conflictos con el autoguardado de Discourse.
- Empecé a registrar información básica (ID del desencadenante, nombre de la plantilla) para poder al menos ver cuándo se activa la apertura automática.
Sospecho que los problemas son:
- La API de búsqueda de Discourse devuelve resultados antes de que se actualice el índice de búsqueda, por lo que el sistema sigue pensando que “no existen temas” incluso justo después de que un usuario publique.
- Filtrar por
@usernameno ayuda si el nombre de usuario no coincide exactamente o si las etiquetas no se alinean con la configuración de la plantilla. - Nunca cancelo los temporizadores de borrador pendientes de Discourse, así que aunque bloqueo las guardadas durante 500 ms, las guardadas en cola todavía se ejecutan más tarde y vuelven a mostrar el borrador/compositor.
Actualmente estoy intentando:
- Después de llamar a
deleteDraft, cancelar inmediatamente el debounce de_saveDraftde Discourse para que los borradores antiguos no puedan reaparecer. - Crear una caché de corta duración que recuerde “Ya he creado un tema aquí con estas etiquetas” para cubrir el retraso del índice de búsqueda.
- Crear 3 modos que se puedan elegir en la sección de Administración
always (siempre)
Abre la plantilla cada vez que coinciden las etiquetas. Sin búsquedas, sin comprobaciones: simplemente abre el compositor.
ifNoTopics (si no hay temas)
Utiliza la búsqueda de Discourse para preguntar: ¿Ya existe algún tema con estas etiquetas?
- Si la respuesta es sí → no abrir.
- Si la respuesta es no → abrir.
Bueno para situaciones en las que “solo debe existir un tema”.
ifUserHasNoTopic (si el usuario no tiene tema)
Busca: ¿Ha creado ya este usuario específico un tema con estas etiquetas?
- Si la respuesta es sí → no abrir.
- Si la respuesta es no → abrir.
Útil cuando cada usuario debe tener su propio hilo personal.
Si alguien tiene alguna sugerencia sobre cómo abordaría la creación de esas configuraciones, me encantaría escucharla.