在个人资料填写过程中动态更新可用用户字段值

我找到了一个自动更新此特定案例的解决方案。自定义字段选项没有 API 更新的可能性,我只在这里通过 cron 作业找到了一个服务器端解决方案。我没有使用 json 文件,而是使用了数据库条目进行自动化。

用例

此自动化的用例是允许新用户在注册时选择现有选项,这可以随着用户表达更多偏好而帮助系统发展。如果新用户找不到合适的选项,他们可以在自定义文本字段中输入自己的文本,然后将其添加到下一个用户的下拉列表中。

这应该谨慎使用,因为对 Discourse 数据库的更改可能导致崩溃,仅推荐给有经验的开发人员!

要求:

步骤 1:

在 /admin/customize/user_fields 中创建两个自定义字段,一个带有下拉列表,另一个仅带有文本(在我的示例中:user_field_5 的下拉列表和 user_field_8 的文本)。

注意:ID 可以从 /admin/customize/user_fields.json 检索。

步骤 2:

最好使用 Discourse Data Explorer 来检查您的输入:Discourse Data Explorer

在 /admin/plugins/explorer 下创建一个新查询:

例如:用户字段选项

SELECT * FROM user_field_options WHERE user_field_id='5'

将 user_field_id=‘5’ 更改为您的下拉用户字段 user_field_id=‘x’,然后将显示下拉选项的值。

创建第二个查询:

例如:用户自定义字段

SELECT * FROM user_custom_fields WHERE name = 'user_field_8'

将 ‘user_field_8’ 更改为您的文本自定义字段 ‘user_field_x’,然后将输出用户输入的文本值。

步骤 3:这是用于更新 user_field_options 数据库的 cron 作业的基本基础,其中列出了自定义字段的所有选项,对我来说,由于 user_field_5,关联值为 5。我想在那里添加选项。

首先,我们在 Discourse 的目录中创建一个 bash 脚本

cd /var/discourse
nano update_dropdown.sh

如果 Discourse 是通过 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);\\\"\"

确保保存脚本并使其可执行

chmod +x update_dropdown.sh

然后您可以启动并测试脚本

cd /var/discourse
./update_dropdown.sh

步骤 4:为了实现自动化,我们需要将 bash 脚本添加为 cron 作业:

crontab -e

这将打开 cron 作业编辑器,您可以在其中添加下一行中的代码:

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

然后该命令将每分钟执行一次。当然,这可以进行调整,并且路径必须根据您在服务器上存储 update_dropdown.sh 的位置进行调整。

3 个赞