如何向模型添加自定义字段

是否可以应用相同的逻辑为标签添加自定义字段?

2 个赞

有人将此应用到群组了吗?如果有,能否分享一下你们是怎么做的?
我想这应该能解决问题。希望它仍然是最新的。

不可以,标签没有自定义字段。您想实现什么目标?

是的,该存储库应该可以工作。只需将所有 my_field 实例更改为您字段的名称。

1 个赞

我正在尝试创建一个插件:Creating a User - Tag relation plugin

关于如何自定义这些组字段是否有更多文档?它确实与这个样板代码一起运行得很好。但如何正确扩展它?

例如,我想添加一些输入字段,例如:

<div class="control-group">
  <label class="control-label" for="map">Chapter coordinates</label>
  <input name="chapter_coordinates" id="chapter_coordinates" class="ember-text-field ember-view input-xlarge" value={{group.custom_fields.group_coordinates}} placeholder="E.g. 52.3727598,4.8936041" type="text">
  <div class="control-instructions">Fetch coordinates from https://nominatim.openstreetmap.org/</div>
</div>

但我只是在猜测该怎么做,然后添加其余的 Discourse 内容。上面的例子是使用一个字段来表示坐标。我打算使用 g.json 来根据组元数据创建一个地图。

我还打算添加一个复选框,用于通过电子邮件向该组发送电子邮件。

<div class="control-group">
  <label class="control-label" for="map">Contact chapter by email</label>
  {{input type="checkbox" checked=group.custom_fields.contact_group_by_email}}
  <span>{{i18n 'admin.groups.contact_group_by_email.label'}}</span>
</div>

但是,这个字段最好放在交互选项卡中。如何知道该怎么做才能将其放在那里?我想变得更精通这一点。但我的感觉是,这些信息只是在代码中,并没有记录在某处。这可能没关系,但需要更多的时间和精力来找到我想要的东西。虽然我想添加的内容很小,只是为组添加几个字段 :nerd_face:

是的,这可能很棘手,并且在开始浏览 Discourse 代码库时会有点不知所措。听起来您正在尝试使用 GeoJSON。您是否考虑过使用或扩展 Locations Plugin?它已经设置为在 Discourse 中使用 GeoJSON。

插件开发课程?

我一直在考虑开设一个免费的 Discourse 插件开发课程,这基本上就是您所需要的。我已经为主题开发课程编写了课程材料(见下文)。如果有人投票赞成插件开发课程,我将编写并(通过 Zoom)提供该课程。

  • 编写并提供插件开发课程
  • 不编写并提供插件开发课程
0 voters
主题开发入门
  1. GitHub - pavilionedu/discourse-theme-introduction
  2. GitHub - pavilionedu/discourse-theme-css
  3. GitHub - pavilionedu/discourse-theme-colors
  4. GitHub - pavilionedu/discourse-theme-html-one
  5. GitHub - pavilionedu/discourse-theme-html-two
  6. GitHub - pavilionedu/discourse-theme-javascript-one
  7. GitHub - pavilionedu/discourse-theme-javascript-two

*ps 如果达到 30 人,请告诉我。

5 个赞

太棒了!我实际上将使用 这个 Fairphone 社区地图 的一个分支。他们使用主题的原始 YAML 输出。我已经修改了我的分支,使用 g.json 中的数据在地图上绘制标记。我只缺少一些字段,例如坐标和一个用于在地图中使用电子邮件地址的布尔值。也许还有一些,但我首先需要了解它是如何工作的。谢谢你的链接!我这周会看看,看看我能进展到什么程度。一门课程也很棒!我现在掌握的是 JS/Ruby 技能。主要是 Python/Bash 和一些其他语言的零碎知识。

是否可以将自定义字段添加到帖子中?最好是从帖子撰写器中添加。

使用此插件需要最低哪个 Discourse 版本?
(discourse-topic-custom-fields)

GitHub - pavilionedu/discourse-group-custom-fields 这个是否仍然是最新的?

我之所以这样问,是因为我尝试实现一个新的自定义组字段,但在点击保存后,它似乎没有保存/保留我输入到输入字段中的值。

这是我所做的所有更改的提交(我认为我正确遵循了 edu 存储库的结构):add discord_role_id field to groups · aloha-pk/discourse-discord-sync@fd3eef1 · GitHub

是的,我刚测试过,它运行正常。

{{input type="text" checked=group.custom_fields.discord_role_id}}

您的问题是您将输入类型更改为 text,但将值输入保留为 checked。您需要将 checked 更改为 value

3 个赞

好吧,这样就行了 :man_facepalming: 谢谢你的帮助!:smile:

1 个赞

我刚用这个更改重新构建,但不幸的是仍然看到同样的问题。我输入的值在保存并重新加载页面后会被清除。

还有其他建议吗 @angus

你还更改了示例中的其他任何内容吗?示例可以正常工作。尝试从示例本身开始。如果它在你的环境中也失败了,那么就是其他地方出了问题。如果示例在你的环境中有效,那么逐步检查你所做的更改,直到找到导致问题的更改。

您好 @angus 使用此插件添加了一个自定义字段,现在运行正常。如何才能在类别页面上将此字段显示在类别名称下方?

以下是找出方法:

  1. 查找 discourse/discourse 中渲染分类页面的模板(在页面上搜索 HTML 元素)

  2. 在其中一个模板中找到一个插件插口 (plugin-outlet)

  3. 按照此处的说明使用插件插口
    Using Plugin Outlet Connectors from a Theme or Plugin

写了这段代码但它仍然不起作用,你能告诉我问题出在哪里吗?

<script type="text/discourse-plugin" version="0.8">
  const { getOwner } = require("discourse-common/lib/get-owner");
  const { htmlSafe } = require("@ember/string");

  api.decorateWidget("category-heading:after", (helper) => {
    const category = helper.attrs.category;

    if (category.custom_fields?.location) {
      const customLocation = htmlSafe(category.custom_fields.location);
      const template = getOwner(helper).lookup("template:components/category-header");

      return template.fragment.build("custom-location", { customLocation });
    }
  });
</script>

<script type="text/x-handlebars" data-template-name="components/category-header/custom-location">
  <div class="category-custom-location">{{customLocation}}</div>
</script>

它哪一部分不起作用?例如,当您在此处插入 console.log(category.custom_fields) 时,您会看到什么?

我今天安装了这个插件,代码如下,但它似乎坏了:GitHub - pavilionedu/discourse-category-custom-fields: Discourse plugin showing how to add custom fields to Discourse categories

它安装为“教育类别自定义字段”,并且作者信息不存在:

你期望发生什么?没有修改它不应该做任何事情。

2 个赞