¿Completar formulario al crear un tema?

¿Es posible que los usuarios completen un formulario al crear un tema? (Es decir, al abrir la ventana de creación de un tema, que aparezca un formulario dentro del tema que deban completar).

Al usar la plantilla de tema al crear una categoría, puedo incluir algunas indicaciones sobre lo que los usuarios deben ingresar. Sin embargo, esto es diferente de un formulario. Las indicaciones pueden ser eliminadas (por lo que los usuarios menos experimentados no saben qué hacer con ellas), y la página se satura si hay varias indicaciones en la misma página.

Un formulario ofrecería una experiencia de usuario más limpia y sencilla en el caso en que desee que los usuarios rellenen algunos datos clave en su tema al crearlo.

¿Es esto posible? Encontré este componente de tema, pero, aunque aún no estoy seguro de qué hace, creo que no logra lo que tengo en mente. También veo esta solicitud de hace varios años; parece que no se tomó ninguna medida.

Además, sé que el plugin Custom Wizard permite crear un formulario para que los usuarios lo completen, pero en este caso necesito que el formulario esté dentro de un tema de Discourse (para que luego aparezca como un tema con toda la funcionalidad correspondiente, como etiquetas, respuestas, etc.). Y necesito que la experiencia del usuario permanezca claramente dentro de la aplicación (creo que el plugin Wizard los lleva a una página separada con un menú diferente, etc.).

3 Me gusta

Esto es sin duda técnicamente posible en un componente de tema.

3 Me gusta

Un tema antiguo muy relacionado para los interesados:

1 me gusta

Gracias.

¿Cómo crees que podría funcionar?

Aquí hay algunas ideas que tengo, aunque todavía quedan algunas preguntas por responder:

Conceptos básicos que ya existen: Marcadores de posición. Pero por ahora es 'todo o nada'

La estructura más simple que se me ocurre para imitar el comportamiento de un formulario sería que el “formulario” aparezca en el editor (el “d-editor” que se abre al hacer clic en crear tema).

En ese editor, se podrían proporcionar diferentes “secciones”, como:

Nombre


Ubicación


Problema


Cada título de sección sería un marcador de posición, de modo que cuando el usuario haga clic en él, el título (por ejemplo, Nombre) desaparecería.

Hasta ahora, configurar esto es posible con el componente de tema de texto marcador de posición.

Pero eso no te llevará completamente al comportamiento tipo formulario, porque los marcadores de posición actuales aparecen de forma “todo o nada”, como describo a continuación.


Comportamiento tipo formulario con marcadores de posición. Pero ¿cómo se accede a los divs en el editor?

Para que esto sea más parecido a un formulario, cada sección debe comportarse de forma independiente.

Actualmente, con el componente de tema de texto marcador de posición, es todo o nada: si el usuario hace clic en el editor, todos los títulos de marcador de posición desaparecen.

Por lo tanto, para tener un comportamiento básico de formulario, en lugar de que todos los títulos aparezcan o desaparezcan juntos, necesitaríamos que cada sección de marcador de posición se comportara de forma independiente. Así, cuando el usuario haga clic en el marcador de posición “Nombre”, solo ese marcador de posición desaparecería, mientras que los otros marcadores de posición (“Ubicación” e “Problema”) permanecerían.

Esto sería posible si cada marcador de posición pudiera ser parte de su propio div con un id único dentro del editor de texto. Luego, con jQuery, se podría mostrar u ocultar el marcador de posición dependiendo de si el usuario hizo clic en el área. Esto requiere agregar divs separados dentro de lo que ahora es un área de texto, y no estoy seguro de cómo hacerlo.

Pregunta para este enfoque: ¿Cómo se puede acceder a los divs dentro del área de texto del editor, para poder tomar acciones cuando el usuario hace clic en ellos?


Alternativa: usar la opción de texto de plantilla existente. Pero ¿cómo hacer que el texto no sea editable?

Probablemente una alternativa sería que los encabezados de sección no “desaparezcan” cuando el usuario hace clic. Así, los encabezados de sección (por ejemplo: Nombre, Ubicación e Problema) serían texto que permanecería en la página. Para hacerlo más parecido a un formulario, en comparación con la plantilla de tema básica actual:

  1. El texto del encabezado de sección no podría ser editado por el usuario (es decir, contenteditable="false")
  2. Los puntos de ruptura de sección no podrían ser eliminados por el usuario
  3. Habría espacio debajo del encabezado de sección donde quede claro que el usuario puede escribir. En la plantilla predeterminada actual, tendrían que ir donde está el texto, presionar enter, para crear espacio para escribir.

Pregunta para este enfoque: ¿Cómo se puede ingresar texto de plantilla, pero (i) que ese texto no sea editable por el usuario y (ii) que haya lugares claros para que el usuario ingrese información debajo de cada pieza de texto?


¿Quizás hay una mejor manera de lograr un comportamiento tipo formulario?

2 Me gusta

Presumiblemente, necesitarías realizar un paso sobre la plantilla antes de renderizar un conjunto más complejo de campos de entrada en lugar de un área de texto monolítica.

Luego, procesarla posteriormente para insertar el texto en los lugares correctos.

Necesitarías algún estándar de marcado para identificar los encabezados/puntos de entrada de texto…

Eso podría ser una solución más ligera, ya que todo se mantendría en el mundo del frontend (todo seguiría almacenado como una sola publicación de texto).

La desventaja principal de ese enfoque sería que sería mucho más difícil buscar y agregar de esta manera…

Suena como un proyecto divertido :slight_smile:

Estoy buscando algo que se mantenga en el front-end por ahora. El análisis y la búsqueda de diferentes partes del formulario no son necesarios en este momento, y asumo que tampoco lo serán en la mayoría de los casos de uso. Se trata de asegurarse de que los usuarios ingresen sus respuestas de manera consistente.

No entiendo a qué te refieres con esto:

Espero volver sobre esto. Espero que haya una forma en el front-end de que los usuarios rellenen algo que (para ellos) parezca un formulario. Por ejemplo, cuando van a crear un tema, verían algo como:

“Nombre”


“Ubicación”


“Problema”


Esto puede quedarse todo en el front-end. No tengo necesidad (sería bueno, pero no es necesario por ahora) de analizar las diferentes secciones de lo que los usuarios envían; todo puede enviarse como ahora. El objetivo es asegurar una presentación más uniforme por parte de los usuarios y ofrecerles una interfaz limpia cuando hay diferentes indicaciones.

La diferencia entre esto y lo que está disponible ahora al añadir una plantilla de tema:
  1. El usuario no podría eliminar estas indicaciones (es decir, no podría eliminar “Nombre”, “Ubicación” e “Problema”).

  2. Idealmente, podría añadir algún estilo de formulario para hacer más obvio para el usuario dónde debe escribir. Esto permitiría una interfaz más limpia para un usuario que crea un tema cuando hay varias indicaciones diferentes. Con las plantillas de tema, el usuario tiene que crear su propio espacio para escribir sus respuestas a cada indicación. Además, la ventana de creación de temas empieza a verse bastante abarrotada cuando tienes diferentes indicaciones en el caso de usar las plantillas de tema actuales.

@sam respondió anteriormente:

Parece que, efectivamente, esto debería ser posible. Mi mayor problema: ¿Cómo puedo cambiar lo que aparece dentro de la ventana de creación de temas en un componente de tema (o en un plugin)? Ahora mismo, parece una caja negra de iframe cuando he intentado hacerlo.

Sé que podría haber alguna forma de entrar allí, dado que eso es lo que hacen las plantillas de tema y lo que hace el plugin de marcador de posición. Pero no he logrado entender cómo lo hacen.

¿Alguna sugerencia sobre lo que puedo hacer con código para cambiar lo que hay en una ventana de creación de temas?

1 me gusta

Echa un vistazo a la Guía para desarrolladores de temas de Discourse. Ese es el punto de partida.

Si te refieres al nombre de usuario y la ubicación, estos se encuentran en el perfil del usuario, así que ¿quizás no sean necesarios?

Gracias por tu respuesta. Estoy familiarizado con cómo crear temas y complementos. Lo que busco aquí es orientación sobre el código específico para acceder al iframe del formulario de creación de temas. No necesito que alguien lo explique todo, pero cualquier guía sería muy apreciada. He tenido dificultades antes para encontrar una forma de realizar cambios en ese formulario.

El ejemplo del nombre, la ubicación, etc., fue solo hipotético como un formulario común. En mi caso particular, necesitaría diferentes indicaciones.

3 Me gusta

También estoy interesado en una solución como un formulario que solicite a los usuarios que ingresen al crear un tema, preferiblemente con la opción de hacer que algunos campos sean obligatorios; algunos de estos datos pueden ser confidenciales y me gustaría tenerlos almacenados en algunos campos personalizados en el tema.

1 me gusta

Revisa Introducing Experimental Form Templates