Presentando plantillas de formulario experimental

Hola, Comunidad de Discourse Meta.

Nos complace presentar una nueva función experimental: plantillas de formularios. Con ella, puedes aplicar un formulario estructurado con validación de datos como parte del flujo de creación de temas.

multiple_form_templates

Habilitar la función

La función está oculta tras un indicador experimental para todo el sitio. Para habilitarla, simplemente activa el ajuste del sitio experimental_form_templates en :wrench: Administrador ▸ Ajustes.

Gestionar las plantillas

Las plantillas de formularios se pueden crear, editar y eliminar en :wrench: Administrador ▸ Personalizar ▸ Plantillas (/admin/customize/form-templates/).

Allí verás una tabla con una lista de las plantillas existentes en el foro. Puedes editar, eliminar y previsualizar cualquier plantilla existente o crear nuevas. La tabla también muestra las categorías en las que cada plantilla está actualmente activa.

Las plantillas se definen en una estructura YAML. Puedes escribirla manualmente o utilizar los botones “Añadir” de la parte superior, que añadirán un fragmento de código YAML de ejemplo al final, definiendo un tipo de entrada determinado.

Aquí tienes un ejemplo completo de YAML, con todos los tipos de campo:

- type: input
  id: name
  attributes:
    label: "Nombre completo"
    placeholder: "ej. Juan Pérez"
    description: "¿Cuál es tu nombre completo?"
  validations:
    required: true
    minimum: 2
    maximum: 100
- type: textarea
  id: introduction
  attributes:
    label: "Introducción"
    placeholder: "Una breve introducción"
    description: "Escribe una breve introducción sobre ti"
  validations:
    required: true
    minimum: 10
    maximum: 500
- type: dropdown
  id: fav-animal
  attributes:
    label: "Animal favorito"
    description: "Selecciona tu animal favorito"
    none_label: "Selecciona una opción"
  choices:
    - "Perro"
    - "Gato"
    - "Otro"
  validations:
    required: true
- type: multi-select
  id: comm-channel
  attributes:
    label: "Canales de comunicación:"
    description: "Selecciona tus canales de comunicación preferidos:"
    none_label: "Selecciona una opción"
  choices:
    - "Correo electrónico"
    - "Teléfono"
    - "Mensajero"
- type: upload
  id: cat-photo
  attributes:
    label: "Foto de gato"
    description: "Envía una foto de tu gato (o de cualquier gato)"
    file_types: ".jpg, .png"
    allow_multiple: false
- type: checkbox
  id: accept-terms
  attributes:
    label: "He leído y acepto los términos"
    description: "Debes aceptar los términos para continuar"
  validations:
    required: true

Validaciones

Para cada campo, puedes añadir opciones de validación que deben cumplirse antes de poder crear el formulario. Para ver una lista de las validaciones disponibles, haz clic en el botón Validaciones encima del editor de código. Esto te mostrará la sintaxis de cada opción de validación y describirá su uso previsto.

Opciones de validación

Clave Tipo Descripción
required booleano Requiere que el campo se complete para enviar el formulario
minimum entero Para campos de texto, especifica el número mínimo de caracteres permitidos
maximum entero Para campos de texto, especifica el número máximo de caracteres permitidos
pattern cadena regex Para campos de texto, una expresión regular que especifica la entrada permitida
type cadena Para campos de entrada, puedes especificar el tipo de entrada que se espera (text|email|date|number|url|tel|color)

Aplicar una plantilla a una categoría

Una vez que hayas creado una plantilla de formulario, querrás aplicarla a una categoría. Para ello, dirígete a los ajustes de la categoría a la que deseas aplicar la plantilla.

Selecciona el menú Plantilla y, a continuación, a la derecha, utiliza el interruptor para activar las plantillas de formularios. Una vez activado, puedes usar el desplegable para añadir una o más plantillas a una categoría.

Rellenar el formulario

Una vez que se ha aplicado una plantilla a una categoría, el formulario de la plantilla aparecerá automáticamente al crear un tema y seleccionar la categoría que tiene la plantilla. Si la categoría tiene más de una plantilla asignada, también verás un selector para cambiar entre las plantillas disponibles.

Al rellenar el formulario, se respetarán las validaciones especificadas en la definición de la plantilla del formulario, y solo después de que sea válido podrás pulsar :heavy_plus_sign: Crear Tema y se generará el contenido del tema a partir de todos los campos de entrada.

Finalmente, después de enviar, el contenido del tema se compone de todos los campos rellenados:

Pre-rellenar valores del formulario

También puedes pre-rellenar los valores del formulario llamando a /new-topic con parámetros que coincidan con los IDs de campo definidos en la plantilla del formulario. Por ejemplo, para la plantilla utilizada anteriormente como ejemplo:

/new-topic?name=Juan%20Pérez&favorite-animal=Gato

Hoja de ruta

  • Almacenar la salida JSON en los datos del tema cuando se crea un tema
  • Opción para poder seguir seleccionando y utilizando el compositor de formato libre en categorías con plantillas de formulario

Cómo puedes ayudarnos

Nos encantaría conocer tu opinión sobre esta nueva función. Si eres administrador y quieres probarla en tu foro, puedes activar el ajuste experimental_form_templates y empezar a usarlas de inmediato.

Por favor, crea nuevos temas etiquetados con form-templates para compartir tus experiencias, informar de cualquier error o proporcionar sugerencias.

¡Gracias por ayudarnos a mejorar Discourse!

84 Me gusta

Esto parece muy útil y definitivamente lo habilitaré para experimentar.

Algo que me resultaría útil es la capacidad de vincular un campo de plantilla a un campo personalizado de usuario. Por ejemplo, en una categoría de soporte, las primeras preguntas que suelen hacer los técnicos de soporte son “¿Modelo del equipo?” y la “URL del sitio web” asociada. Con esta función de plantilla, ahora puedo solicitar esta información cada vez que se crea un nuevo tema :smiley:

Estos dos datos también son de interés general para otros usuarios, por lo que se definen como campos personalizados de usuario, que a veces se completan. Si los campos de plantilla pudieran completarse a partir de un campo de usuario personalizado vinculado (si tiene un valor), entonces los usuarios frecuentes podrían completar sus campos de usuario y no tener que completar los campos de plantilla cada vez. Los usuarios ocasionales simplemente pueden completar los campos de plantilla cuando necesiten soporte.

Como sugerencia adicional, la guinda del pastel sería que el enlace funcionara a la inversa. Si alguien introduce datos en la plantilla que no están en el campo de usuario personalizado vinculado, el campo personalizado se actualiza cuando se publica el tema.

13 Me gusta

Hola :wave:

Esta es una de las mejores mejoras. Ofrece muchas oportunidades. :heart_eyes:

Algunas notas:

  1. Parece que falta la cadena form_templates.errors.valueMissing.number.

  2. Parece que la validación de tel no funciona.

  3. En el móvil, la plantilla de formulario en el compositor no se puede desplazar.

  4. En el móvil, cuando la plantilla de formulario está disponible, los botones del pie de página no hacen nada. Creo que sería bueno ocultarlos.
    Screenshot 2023-10-17 at 8.04.50

+ Sería útil añadir validación para evitar números negativos al tipo number. Caso de uso (precio) :slightly_smiling_face:

+ También sería útil añadir una función de campos condicionales dinámicos.


Gracias :slight_smile:

15 Me gusta

Como ya se mencionó, esto será muy útil para contextos de soporte y me gustan especialmente las sugerencias de @packman sobre los campos de usuario personalizados.

¿La adición de plantillas de formularios a los grupos también está en el plan (o podría estarlo)? Donde la mensajería de un grupo se utiliza para soporte privado, esto será especialmente útil para cargar preguntas antes de que llegue un miembro del personal.


Dependiendo de la visibilidad del campo personalizado, esto podría tener implicaciones de privacidad. Por ejemplo, el usuario podría optar por compartir la información a través de una plantilla de formulario en una categoría privada, pero no querer compartir esa información con la comunidad en general a través de su perfil.

Dependiendo de la naturaleza de la información, también podría tener un valor que sea apropiado para su perfil y/o la mayoría de los formularios, pero es posible que desee proporcionar un valor diferente en una instancia particular.

Me gusta la idea de rellenar el formulario a partir de esos campos y poder actualizar los campos si los valores introducidos difieren, pero tal vez eso debería ser una indicación. Este es un ejemplo muy rápido y rudimentario, pero tal vez algo en esta línea después de crear el tema (solo si un valor difiere y posiblemente solo si no está vacío):

8 Me gusta

Mi solicitud de funcionalidad para esta gran nueva funcionalidad es, creo, común en los foros de soporte de software.

La gente olvida especificar su versión del software. Eso es todo. Simple, pero es la causa de muchas, muchas publicaciones inútiles de ida y vuelta que son tediosas para las personas que ayudan a muchas personas (y no queremos cansar a las personas más importantes de la Comunidad).

Así que querría un formulario para preguntar

  • Tu versión de FabulousApp es… (menú desplegable con opciones)
  • Tu versión de PHP es… (menú desplegable con opciones)

Ahora, supongamos que alguien publica con frecuencia en los foros. Esta información no cambia con frecuencia, aunque podría cambiar, digamos, una vez al mes.

El formulario debería mantener los valores que el mismo usuario seleccionó en su publicación anterior, como valores predeterminados, esa es mi solicitud de funcionalidad. ¿Qué opinas?

5 Me gusta

Creo que en algunos casos, tener un campo pre-rellenado puede hacer que los usuarios lo pasen por alto y no cambien el valor cuando es necesario. :thinking:

Especulando puramente, sin embargo.

10 Me gusta

Estas dos combinadas es lo que me gustaría ver para mi caso de uso. Con múltiples aplicaciones, quiero que el usuario pueda seleccionar su aplicación, luego seleccionar su versión de una lista que corresponda a esa aplicación.

Esta es ciertamente mi experiencia con las opciones. Con un valor predeterminado en un formulario de contacto por correo electrónico, la gran mayoría de los envíos tienen ese valor predeterminado independientemente de la aplicación o versión que estén utilizando realmente.

3 Me gusta

Eso es probablemente cierto para los valores predeterminados, pero en lo que yo imaginaba, los valores de los campos serían aquellos ingresados previamente por el usuario en sus campos personalizados. Estos podrían ser viejos/desactualizados, pero creo que en mi caso de uso habría muchos menos valores incorrectos que valores actualmente inexistentes.

2 Me gusta

Absolutamente. En mi opinión, estas son principalmente dos categorías diferentes de información: estado en un momento dado y preferencia/identidad del usuario/etc. Lo que me refería con mi experiencia de valores predeterminados era más sobre lo primero.

2 Me gusta

¡Dos solicitudes!

  1. Un campo de código que delimita automáticamente el contenido con ```
    • Podría tener un menú desplegable de idioma, con una opción predeterminada.
  2. Un atributo que permite a los usuarios duplicar un campo (imagino un botón + debajo de ese campo).
    • Imagina si un usuario quiere publicar dos bloques de código, o varias imágenes. Pueden introducir uno, hacer clic en el + y añadir otro.
16 Me gusta

Esta es una nueva y excelente función, y potencialmente oportuna para un proyecto en el que estoy trabajando.

Después de jugar un poco con ella, tengo dos preguntas:

  1. Actualmente, cuando el usuario edita una publicación de tema que ha creado a través de una plantilla de formulario, solo muestra el editor de publicaciones predeterminado.
    ¿Hay planes para mostrar también el editor de plantillas de formulario al editar una publicación?

  2. ¿Habrá una opción para agregar tipos de entrada personalizados?
    Estoy pensando en un mapa donde un usuario pueda seleccionar su ubicación dejando caer un pin en el mapa. Por lo tanto, sería bueno tener la opción de definir dichos tipos de campos personalizados.

4 Me gusta

¡Este es el momento perfecto para mi caso de uso! Me pregunto si hay planes para permitir eventualmente la personalización de cómo se renderiza una plantilla de formulario en un tema.

Por ejemplo, en la siguiente imagen, el tipo de campo checkbox se renderiza como el texto on:

¿Alguien podría eventualmente mapear los tipos de campos del formulario a una salida personalizada?

Por ejemplo, en mi caso, quiero que una casilla de verificación marcada/on se mapee al formato de casilla de verificación, [x], y la falta de una marca/estado desactivado a []

Puede que tenga que empezar a aprender ruby y a trastear con este proyecto, esta actualización de formularios me ha dado muchas ideas geniales. ¡Gracias por el gran trabajo, chicos!

3 Me gusta

¡Esta es una forma absolutamente genial de imponer un comportamiento en una categoría particular (mi punto de dolor eran las publicaciones de empleo, donde todos publicaban como les parecía :smiley: )!

Un conjunto de características adicionales sería agradable:

  • la capacidad de “cambiar a ninguna plantilla” (opcional). Esto sería bueno limitarlo por usuarios, por nivel, por grupo, etc.; Algún tipo de “Confía en mí, ¡sé lo que estoy haciendo!”
  • varios campos en la misma fila (piensa en nombre + apellido). Una solución suficientemente buena sería permitir a los administradores establecer un nombre de clase para la plantilla del formulario;
  • un repetidor (es decir, agrupar un montón de campos y permitir a los usuarios agregar más de esos);
7 Me gusta

Sería bueno tener la capacidad de:

  • Pegar contenido en un campo de carga[1].
  • Añadir un editor además del área de texto, donde los usuarios tengan acceso al conjunto normal de funciones.[2]

  1. La funcionalidad de carga en las publicaciones de Discourse es genial. Esta es más difícil de usar, ya que requiere que las imágenes ya estén guardadas en el disco, por ejemplo. ↩︎

  2. Si quiero que un usuario seleccione un menú desplegable además de una publicación, con el enfoque actual (un área de texto) disminuyo drásticamente su capacidad para crear su publicación normalmente; no se pueden pegar imágenes, no hay barra de edición, etc. ↩︎

9 Me gusta

Intenté el formulario aquí para informar de un error sobre el tema. Aquí está mi opinión:

  • El formulario en sí es una gran idea :+1:
  • La falta de una herramienta de formato es una gran omisión.
    • Incluso si la sintaxis de markdown es básica, seleccionar y usar la barra de herramientas suele ser más fácil/rápido. Ayuda a crear un mensaje legible.
    • Esto puede funcionar si el informe es un problema simple pero avanzado; es posible que necesites ocultar detalles o insertar una tabla.
  • La falta de carga en línea no es conveniente.
    • Por ejemplo, mostrar un problema paso a paso, resultados antes/después, etc.
    • En caso de varias capturas de pantalla, debes explicar qué capturas de pantalla debes mirar.
  • Al igual que Thomas, sería bienvenido pegar una imagen. Me tomó tiempo darme cuenta de dónde se guardaron mis capturas de pantalla. :smile:
  • Entrada condicional: al seleccionar “otro”, sería bueno que apareciera una entrada para eso.

En general, ¡muy bien! Estoy deseando ver cómo mejorará. :slight_smile:

9 Me gusta

Si tienes varios formularios habilitados para una sola categoría, no es intuitivo que haya un menú desplegable para seleccionar un formulario. Cuando creas un nuevo tema, se rellena automáticamente la primera plantilla de formulario, que de nuevo, si no sabes lo que estás viendo, no te darías cuenta de que podría haber otros formularios.

Cuando deseleccionas el formulario, ves el texto “Seleccionar plantillas de formulario”, que me queda claro que hay una lista de formularios de la que elijo. El compositor todavía muestra el formulario aunque no se haya seleccionado ninguno. Aquí es donde estaría de acuerdo con @iamntz sobre tener la opción de cambiar a ninguna plantilla.

6 Me gusta

Solo quiero añadir algo a mi respuesta anterior y dar un poco más de contexto a nuestro caso de uso específico. Estamos buscando implementar esto en nuestra categoría de Comentarios del sitio. Idealmente, queremos plantillas de formulario para cosas como solicitar etiquetas y mantener el compositor predeterminado (sin opción de plantilla), si el formulario no existe o no hace el trabajo correctamente.

Entonces, lo que estamos imaginando sería crear un nuevo tema en la categoría y ver esto:

Desde allí, ver “Seleccionar plantillas de formulario”, donde desde allí puedes componer normalmente o ver que existen formularios en esta categoría para solicitudes/comentarios estandarizados. :slight_smile:

Puedo ver el argumento de que algunos usuarios no verán ni usarán la plantilla del formulario, si pueden componer, pero estaba tratando de mantenerme dentro del estilo actual con el texto de marcador de posición dentro del campo en lugar de una etiqueta fuera del campo. Pero es por eso que podría ser una característica opcional donde los administradores la habilitan/deshabilitan. :upside_down_face:

4 Me gusta

Si el botón de selección estuviera claramente resaltado, sería mucho más fácil animar a los usuarios a hacer clic en él, similar a tu botón Crear tema.

3 Me gusta

Después de jugar más con los formularios, descubrimos que una solución alternativa para una opción de “sin plantilla” sería crear un formulario simple de “respuesta libre” que pueda servir como sin plantilla (como se ve en la captura de pantalla a continuación).

Añadiendo a esta idea, si no quisiéramos cambiar el color para resaltar el menú desplegable, creo que añadir una flecha hacia abajo sería un indicador útil de que hay una selección desplegable, al igual que el menú desplegable de categorías.

Descubrimos que los formularios están ordenados alfabéticamente. Sería increíble tener la opción de reordenar los formularios o la opción de seleccionar el formulario predeterminado que debería aparecer al crear un nuevo tema.

No hace falta decir que nos gusta lo que esta función tiene para ofrecer, y estaríamos entusiasmados con tales mejoras. :slight_smile:

6 Me gusta

Quizás me lo he perdido, pero ¿hay alguna forma de tener un hipervínculo en un formulario? Por ejemplo, digamos que tenemos una casilla de verificación para los términos y condiciones. En la description sería útil tener un hipervínculo a los términos y condiciones reales.

¿Ya es posible?

¿Hay también alguna forma de rellenar automáticamente el campo del título cuando el usuario crea una nueva publicación, como con su nombre de usuario, o incluso con un título predeterminado?

8 Me gusta