モデルにカスタムフィールドを追加する方法

タグにカスタムフィールドを追加することは可能ですか?

「いいね!」 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 プラグイン開発の無料コースの実施を検討しています。これは本質的にあなたが必要としているものです。すでにテーマ開発コースの教材は作成済みです(下記参照)。プラグイン開発コースに 30 人が投票した場合、コース(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. https://github.com/pavilionedu/discourse-theme-javascript-one
  7. GitHub - pavilionedu/discourse-theme-javascript-two

追伸: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}}

問題は、inputのtypeをtextに変更したのに、valueのinputをcheckedのままにしていることです。checkedvalueに変更する必要があります。

「いいね!」 3

なるほど、それで解決するはずです :man_facepalming: 助かりました! :smile:

「いいね!」 1

この変更で再構築できましたが、残念ながら同じ問題が発生しています。入力した値は、ページを保存して再読み込みするとクリアされてしまいます。

他に何か提案はありますか @angus

例から他に何か変更しましたか? 例は機能します。例自体から始めてみてください。それでも環境で失敗する場合は、他に何か問題が発生していることになります。環境で例が機能する場合は、それを壊しているものを見つけるまで、行った変更を段階的に確認してください。

こんにちは、@angus このプラグインを使用してカスタムフィールドを追加しましたが、正常に動作しています。カテゴリ名の下にカテゴリページにこのフィールドを表示するにはどうすればよいですか?

それを把握する方法は次のとおりです。

  1. ディスコース/ディスコース内のカテゴリページをレンダリングするテンプレートを見つけます(ページ上のHTML要素を検索します)。

  2. それらのテンプレートのいずれかでプラグインアウトレットを見つけます。

  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

「Education Category Custom Field」としてインストールされ、著者情報は表示されません:

何が起こると予想されますか? 変更なしでは何も起こらないはずです。

「いいね!」 2