Actualizar dinámicamente los valores de los campos de usuario disponibles durante el llenado de un perfil

Gracias por las rápidas respuestas @JammyDodger y @Canapin, tengo una pregunta específica:

Me gustaría actualizar valores en un campo personalizado a través de un campo de texto, que, por ejemplo, indica el lugar de residencia y va acompañado de un JSON.

Cómo cambiar campos de usuario con la API, solo hay un ejemplo para crear nuevos usuarios o cambiar el valor en lugar del perfil de un usuario a través de un campo personalizado.

Como ejemplo:

  1. Hay un campo personalizado desplegable con valores (por ejemplo, Berlín, Hamburgo).

  2. Hay un campo personalizado con texto, que se utiliza cuando el usuario no es de Berlín o Hamburgo; introducen “Hannover”.

  3. Quiero añadir el campo personalizado desplegable con valores (por ejemplo, Berlín, Hamburgo, Hannover), pero no sé cómo hacerlo. Es una especie de automatización para añadir ciudades que no están listadas.

  4. El campo personalizado desplegable debería depender de una lista JSON de un campo personalizado de texto.

No estoy seguro de entenderlo todo…

¿Quieres tener valores de menú desplegable dinámicos, cargados desde un archivo json, que dependan del contenido de otro campo de usuario?

Eso probablemente necesitaría un componente de tema, pero no estoy seguro de que sea súper fácil.

1 me gusta

Ya ya, de hecho, tengo problemas con la actualización de los valores de los campos personalizados. No quiero actualizar el perfil del usuario. Quiero actualizar las opciones en un campo personalizado desplegable :sweat_smile:

Ok, esa es una pregunta muy específica y no estoy seguro de que esté necesariamente relacionada con la API. Es más una manipulación del DOM. Pero dejaré que los expertos compartan sus conocimientos :slight_smile:

1 me gusta

He encontrado una solución para actualizar automáticamente este caso específico. No hay posibilidad de actualizar la API para las opciones de campos personalizados, solo he encontrado una solución del lado del servidor aquí a través de un cron job. No utilicé el archivo json, utilicé las entradas de la base de datos para la automatización.

El caso de uso

El caso de uso para esta automatización es permitir que los nuevos usuarios seleccionen opciones existentes al registrarse, lo que puede ayudar al sistema a evolucionar a medida que se conocen las preferencias de más usuarios. Si un nuevo usuario no encuentra una opción apropiada, puede ingresar su propio texto en el campo de texto personalizado, que luego se puede agregar a la lista desplegable para el próximo usuario.

¡Esto debe usarse con precaución, ya que los cambios en las bases de datos de Discourse pueden provocar fallos, recomendado solo para desarrolladores experimentados!

Requisitos:

Paso 1:

Crea dos campos personalizados en /admin/customize/user_fields, uno con un desplegable y otro solo con texto (en mi ejemplo: desplegable con user_field_5 y texto con user_field_8).

Nota: La ID se puede obtener de /admin/customize/user_fields.json.

Paso 2:

Es mejor usar Discourse Data Explorer para verificar sus entradas: Discourse Data Explorer

Crea una nueva consulta en /admin/plugins/explorer:

Ejemplo: Opciones de campo de usuario

SELECT * FROM user_field_options WHERE user_field_id='5'

Cambia user_field_id=‘5’ a tu user_field_id=‘x’ desplegable. Luego se mostrarán los valores que se muestran para las opciones de tu desplegable.

Crea una segunda consulta:

Ejemplo: Campos personalizados de usuario

SELECT * FROM user_custom_fields WHERE name = 'user_field_8'

Cambia ‘user_field_8’ a tu campo de texto personalizado ‘user_field_x’. Luego se mostrarán los valores que tus usuarios han ingresado para el texto.

Paso 3: Esta es la base fundamental para que tu cron job actualice la base de datos user_field_options, donde se enumeran todas las opciones para los campos personalizados, que tienen el valor asociado 5 para mí debido a user_field_5. Quiero agregar opciones allí.

Primero, creamos un script bash en el directorio de Discourse

cd /var/discourse
nano update_dropdown.sh

Agrega el siguiente contenido si Discourse se ejecuta como Docker:

#!/bin/bash
cd /var/discourse
docker exec -i app su postgres -c \"psql discourse -c \\\"UPDATE user_custom_fields SET value = (SELECT value FROM user_field_options WHERE user_field_id = 5 AND user_field_options.value = user_custom_fields.value) WHERE name = 'user_field_8' AND value IS NOT NULL AND value NOT IN (SELECT value FROM user_field_options);\\\"\"

Asegúrate de guardar el script y hacerlo ejecutable

chmod +x update_dropdown.sh

Luego puedes iniciar y probar el script

cd /var/discourse
./update_dropdown.sh

Paso 4: Para automatizar esto, necesitamos agregar el script bash como un cron job:

crontab -e

Esto abre el editor de cron job, donde agregas el código en la siguiente línea:

* * * * * /var/discourse/update_dropdown.sh

Luego, el comando se ejecutará cada minuto. Esto, por supuesto, se puede ajustar, y la ruta debe ajustarse según dónde hayas almacenado update_dropdown.sh en el servidor.

3 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.