Atualizar dinamicamente os valores de campos de usuário disponíveis durante o preenchimento de perfil

Obrigado pelas respostas rápidas @JammyDodger e @Canapin, tenho uma pergunta específica:

Gostaria de atualizar valores em um campo personalizado através de um campo de texto, que, por exemplo, indica o local de residência e é acompanhado por um JSON.

Como alterar campos de usuário com a API, há apenas um exemplo para criar novos usuários ou alterar o valor em vez do perfil de um usuário através de um campo personalizado.

Como exemplo:

  1. Existe um campo personalizado de seleção suspensa com valores (por exemplo, Berlim, Hamburgo).

  2. Existe um campo personalizado com texto, que é usado quando o usuário não é de Berlim ou Hamburgo; eles inserem “Hanôver”.

  3. Eu quero então adicionar o campo personalizado de seleção suspensa com valores (por exemplo, Berlim, Hamburgo, Hanôver), mas não sei como fazer isso. É um tipo de automação para adicionar cidades que não estão listadas.

  4. O campo personalizado de seleção suspensa deve depender de uma lista JSON de um campo personalizado de texto.

Não tenho certeza se entendi tudo…

Você quer ter valores de dropdown dinâmicos – carregados de um arquivo json – dependendo do conteúdo de outro campo do usuário?

Isso provavelmente precisaria de um componente de tema, mas não tenho certeza se é super fácil.

1 curtida

Eu sei, eu sei, na verdade estou com dificuldades na questão da atualização dos valores de campos personalizados, não quero atualizar o perfil do usuário. Quero atualizar as opções em um campo personalizado do tipo Dropdown :sweat_smile:

Ok, então essa é uma pergunta bem específica, e não tenho certeza se está necessariamente relacionada à API. É mais manipulação do DOM. Mas deixarei os especialistas compartilharem o conhecimento deles :slight_smile:

1 curtida

Encontrei uma solução para atualizar automaticamente este caso específico. Não há possibilidade de atualização da API para opções de campos personalizados, encontrei apenas uma solução do lado do servidor aqui por meio de um cron job. Não usei o arquivo json, usei as entradas do banco de dados para automação.

O caso de uso

O caso de uso para esta automação é permitir que novos usuários selecionem opções existentes ao se registrarem, o que pode ajudar o sistema a evoluir à medida que mais usuários expressam suas preferências. Se um novo usuário não encontrar uma opção apropriada, ele poderá inserir seu próprio texto no campo de texto personalizado, que poderá ser adicionado à lista suspensa para o próximo usuário.

Isso deve ser usado com cautela, pois alterações nos bancos de dados do Discourse podem causar falhas, recomendado apenas para desenvolvedores experientes!

Requisitos:

Etapa 1:

Crie dois campos personalizados em /admin/customize/user_fields, um com uma lista suspensa e outro apenas com texto (no meu exemplo: lista suspensa com user_field_5 e texto com user_field_8).

Observação: O ID pode ser obtido em /admin/customize/user_fields.json.

Etapa 2:

É melhor usar o Discourse Data Explorer para verificar suas entradas: Discourse Data Explorer

Crie uma nova consulta em /admin/plugins/explorer:

Exemplo: Opções de Campo de Usuário

SELECT * FROM user_field_options WHERE user_field_id='5'

Altere user_field_id=‘5’ para o seu user_field_id=‘x’ da lista suspensa. Em seguida, os valores exibidos para as opções da sua lista suspensa serão exibidos.

Crie uma segunda consulta:

Exemplo: Campos Personalizados de Usuário

SELECT * FROM user_custom_fields WHERE name = 'user_field_8'

Altere ‘user_field_8’ para o seu campo de texto personalizado ‘user_field_x’. Em seguida, os valores que seus usuários inseriram para texto serão exibidos.

Etapa 3: Esta é a base para o seu cron job atualizar o banco de dados user_field_options, onde todas as opções para campos personalizados estão listadas, que têm o valor associado 5 para mim por causa do user_field_5. Quero adicionar opções lá.

Primeiro, criamos um script bash no diretório do Discourse

cd /var/discourse
nano update_dropdown.sh

Adicione o seguinte conteúdo se o Discourse for executado 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);\""

Certifique-se de salvar o script e torná-lo executável

chmod +x update_dropdown.sh

Em seguida, você pode iniciar e testar o script

cd /var/discourse
./update_dropdown.sh

Etapa 4: Para automatizar isso, precisamos adicionar o script bash como um cron job:

crontab -e

Isso abre o editor de cron job, onde você adiciona o código na próxima linha:

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

Em seguida, o comando será executado a cada minuto. Isso pode, é claro, ser ajustado, e o caminho deve ser ajustado dependendo de onde você armazenou update_dropdown.sh no servidor.

3 curtidas

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