Discourse のテンプレート場所をコードで設定するにはどうすればよいでしょうか?
特に、ユーザーカードの正しい名前を知りたいです。
当社の各種ハンドルバーテンプレートのプラグインアウトレットを追跡するための非常に便利なテーマコンポーネントがあります:https://meta.discourse.org/t/plugin-outlet-locations-theme-component/100673。最初の投稿の末尾には、テーマクリエーターサイトでのコンポーネントのプレビューへのリンクがあります。これを使用すれば、自サイトにインストールしなくても、ほとんどのプラグインアウトレットを見つけることができます。
注意点として、テンプレートとウィジェットは異なる概念です。とはいえ、必要に応じてテンプレートのプラグインアウトレットにウィジェットをマウントすることで、両者を連携させることも可能です。ただし、現時点ではプラグインと同様に、プラグインアウトレットを扱うためにはコネクターやコンポーネント、コントローラーを使用する方が一般的です。
このセクションでは、開発者ガイドが求めている内容の多くを網羅しています。また、当社の Customization > Theme カテゴリにあるテーマコンポーネントの GitHub リポジトリを参照し、優れた例を確認することもお勧めします。
ヒントをありがとうございます!必要な部分 user-card-post-names:after を見つけることができました。
元のコードで試してみましたが、失敗してしまいました。
poster-name:after を user-card-post-names:after に変更しましたが、動作せず、カスタムフィールドがユーザーカードに表示されません。その理由について何かご存知でしょうか?
decorateWidget() をプラグインアウトレットで使用することはできません。以下のようにしてみてください:
<script type="text/discourse-plugin" version="0.8.42">
const h = require("virtual-dom").h;
api.createWidget("user-card-custom-field", {
html(attrs) {
const userCustomFields = attrs.user.custom_fields;
if (userCustomFields.user_field_4) {
return h('span.poster-user-field', userCustomFields.user_field_4);
}
}
});
</script>
<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
{{mount-widget widget="user-card-custom-field" args=(hash user=user)}}
</script>
mount-widget は、コアから利用可能なプラグインアウトレットの user オブジェクトを渡しており、作成した user-card-custom-field ウィジェットの属性内で利用可能にしています。
必要に応じて、public user custom fields または staff user custom fields サイト設定に user_field_4 を追加していることを確認してください。
編集
特に特別な処理が必要でなければ、ウィジェット全体を避け、単にプラグインアウトレットを使用することもできます:
<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
{{#if user.custom_fields.user_field_1}}
<span class="poster-user-field">{{user.custom_fields.user_field_1}}</span>
{{/if}}
</script>
ありがとうございます!すべて正常に動作しています。

