URLコンポーザーテンプレート

私のサイトにはかなり専門的なコンポーネントですが、役立つかもしれないのでここに共有します。URL内の文字列に基づいて、コンポーザーにテンプレートを追加します。

タグ用のコンポーザーテンプレートを持つことについては多くの議論がありましたが、私のユースケースでは機能しなかったので、代わりにこれを構築しました。これは緊急時に使用することも、タグにも機能するように少し変更することもできます。

GitHub: GitHub - focallocal/url-composer-templates: Reads url strings and adds template text to the composer if a match is found

URLコンポーザテンプレート

URLパラメータに基づいてコンポーザーをテンプレートテキストで事前入力するDiscourseテーマコンポーネント。さまざまな種類のやり取りに対してコンテキスト固有のテンプレートを提供するために、Docussとシームレスに連携するように設計されています。

特徴

  • URLパラメータサポート: URL内の?composer_template=Xを自動的に検出し、対応するテンプレートを適用します。
  • 複数のテンプレートタイプ: さまざまな目的(レポート、参加、招待、カスタムテンプレート)のために最大6種類のテンプレートを設定可能
  • コンポーザーの自動オープン: スレッドが存在しないDocussリンクにアクセスした際に、コンポーザーを自動的に開くオプション
  • 柔軟な適用: テンプレートは最初の投稿のみ、すべての返信、またはその両方に適用可能
  • セッション永続性: sessionStorageを使用して、ページナビゲーション間でテンプレートの選択を維持します
  • デバッグモード: テンプレートの適用をトラブルシューティングするために、詳細なコンソールロギングを有効にします

インストール

  1. Discourseにテーマコンポーネントをインストールします:

    • 管理 → カスタマイズ → テーマ に移動します
    • 「インストール」→「Gitリポジトリから」をクリックします
    • 次のURLを入力します: https://github.com/focallocal/url-composer-templates
    • コンポーネントをアクティブなテーマに追加します
  2. プラグインの再ビルドは不要です! composer_templateパラメータのサポートは、すでにdcs-discourse-pluginおよびdcs-clientに存在します。

  3. Reactアプリ(fl-maps)をデプロイしますcomposerTemplateプロパティを渡す更新されたDCSLinkコンポーネントを使用します。

  4. コンポーネント設定でテンプレートを設定します(管理 → カスタマイズ → テーマ → お使いのテーマ → url-composer-templates → 設定)。

設定

テンプレート設定

各テンプレートには3つの設定オプションがあります。

テンプレート1(レポート)

  • template_1_id: report - このテンプレートをトリガーするURLパラメータの値
  • template_1_text: コンポーザーに事前入力するテキスト
  • template_1_use_for: first_post - 新しいトピックを作成する場合にのみ適用

テンプレート2(参加)

  • template_2_id: going - 「参加します」タイプのインタラクション用
  • template_2_text: 参加確認のための事前入力テキスト
  • template_2_use_for: all_replies - すべての返信に適用(最初の投稿には適用しません)

テンプレート3(招待)

  • template_3_id: invite - 招待インタラクション用
  • template_3_text: 招待のための事前入力テキスト
  • template_3_use_for: all_replies - すべての返信に適用

テンプレート4-6(カスタム)

  • デフォルトでは無効
  • 特定のユースケースのために有効化およびカスタマイズ可能
  • 必要に応じてID、テキスト、適用範囲を設定します

自動オープン設定

  • enable_auto_open_composer: true - 有効にすると、次の場合にコンポーザーが自動的に開きます。
    • Docussリンクがクリックされた場合(URLに?composer_template=Xが含まれる)
    • そのタグの組み合わせに対する既存のスレッドがない場合
    • ユーザーがすぐにディスカッションを開始できるように支援します

デバッグモード

  • debug_mode: false - 有効にすると、絵文字プレフィックス付きの詳細なコンソールログが表示されます。
    • :artist_palette: テンプレート適用ログ
    • :rocket: コンポーザー自動オープンログ

Docuss統合

自動統合

url-composer-templatesコンポーネントは、Docussと自動的に連携するように設計されています。両方を持っている場合:

  • Discourseインスタンスにこのコンポーネントがインストールされている
  • 更新されたDocussクライアントとプラグイン(composer_templateサポート付き)

テンプレートは次に基づいて自動的に適用されます。

  1. インタラクトモード:
    • DISCUSSモード → triggerIdヒント(going、invite)を使用するか、reportにデフォルト設定されます
    • COMMENTモード → reportテンプレートを使用します

HTML属性によるカスタムテンプレート

より正確な制御のために、HTMLでdata-dcs-composer-template属性を使用してテンプレートを直接指定できます。

<!-- 例: レポートボタン -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="issue-report"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="report">
  問題を報告する
</div>

<!-- 例: 参加ボタン -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="event-rsvp"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="going">
  参加します!
</div>

<!-- 例: 招待ボタン -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="invite-friends"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="invite">
  友達を招待
</div>

<!-- 例: カスタムテンプレート -->
<div class="dcs-trigger" 
     data-dcs-trigger-id="feedback"
     data-dcs-interact-mode="DISCUSS"
     data-dcs-composer-template="custom1">
  フィードバックを送信
</div>

テンプレートIDのマッチング

コンポーネントは、URLパラメータからのテンプレートIDと設定されているテンプレートIDを照合します。

URLパラメータ テンプレート設定 デフォルトの目的
?composer_template=report template_1_id バグレポート、問題
?composer_template=going template_2_id イベントの出欠確認
?composer_template=invite template_3_id 招待
?composer_template=custom1 template_4_id カスタム使用
?composer_template=custom2 template_5_id カスタム使用
?composer_template=custom3 template_6_id カスタム使用

仕組み

テンプレート適用フロー

  1. URL検出: ユーザーが?composer_template=Xを含むURLに移動すると、コンポーネントはこのテンプレートIDをsessionStorageに保存します
  2. コンポーザーの傍受: コンポーザーが開くと、コンポーネントは保存されているテンプレートIDをチェックします
  3. テンプレートのマッチング: IDに基づいて一致するテンプレートを見つけます
  4. スコープの検証: テンプレートを適用すべきか(最初の投稿、返信、またはその両方)をチェックします
  5. テキストの挿入: コンポーザーにテンプレートテキストを事前入力します
  6. クリーンアップ: 再適用を防ぐために、テンプレートが適用済みであることをマークします

自動オープンフロー

  1. パラメータ検出: URLに?composer_template=Xが含まれているか、自動オープンが有効になっているかを確認します
  2. トピック検索: 現在のタグの組み合わせを持つ既存のトピックを検索します
  3. コンポーザーのオープン: トピックが見つからない場合、コンポーザーを自動的に開きます
  4. テンプレートの適用: その後、上記の通常のフローを通じてテンプレートが適用されます

使用例

イベントウェブサイト

# settings.yml
template_2_id: "going"
template_2_text: "参加する予定です!🎉\n\n皆さんにお会いできるのを楽しみにしています。"
template_2_use_for: "all_replies"

template_3_id: "invite"
template_3_text: "このイベントに友達を招待したいです。\n\n招待する人:\n- \n\n招待する理由:\n"
template_3_use_for: "first_post"

課題追跡

template_1_id: "bug"
template_1_text: "**バグの説明:**\n\n**再現手順:**\n1. \n2. \n3. \n\n**期待される動作:**\n\n**実際の動作:**\n"
template_1_use_for: "first_post"

template_4_enabled: true
template_4_id: "feature"
template_4_text: "**機能リクエスト:**\n\n**ユースケース:**\n\n**提案される解決策:**\n"
template_4_use_for: "first_post"

コミュニティエンゲージメント

template_1_id: "question"
template_1_text: "**私の質問:**\n\n**試したこと:**\n\n**追加のコンテキスト:**\n"
template_1_use_for: "first_post"

template_2_id: "answer"
template_2_text: "私にとってうまくいったのは次のとおりです。\n\n**解決策:**\n\n**動作の理由:**\n"
template_2_use_for: "all_replies"

トラブルシューティング

テンプレートが適用されない場合

  1. URLパラメータを確認: URLに、テンプレートIDと一致する?composer_template=Xが含まれていることを確認します
  2. デバッグモードを有効にする: 設定でdebug_modeをオンにして、コンソールログを確認します
  3. テンプレートスコープを確認: use_for設定がアクション(トピック作成 vs 返信)と一致しているか確認します
  4. SessionStorageをクリア: ブラウザコンソールを開き、次を実行します: sessionStorage.clear()

自動オープンが機能しない場合

  1. 設定を確認: enable_auto_open_composertrueに設定されていることを確認します
  2. URLを確認: 自動オープンは、URLに?composer_template=Xが含まれている場合にのみ機能します
  3. 既存のトピックを確認: 自動オープンは、タグの組み合わせを持つトピックが存在しない場合にのみトリガーされます
  4. デバッグモードを有効にする: コンソールで🚀絵文字ログを探します

間違ったテンプレートが適用される場合

  1. テンプレートIDを確認: URLパラメータがテンプレートIDと完全に一致していることを確認します(大文字と小文字が区別されます)
  2. 優先順位を確認: 複数のテンプレートが一致する可能性がある場合、最初に一致したテンプレートが使用されます
  3. セッションをクリア: SessionStorageに古い値が残っている可能性があります: sessionStorage.clear()

Docuss統合の問題

  1. Docussを更新: 次の最新バージョンがあることを確認します。
    • dcs-client(HtmlBased.jsでcomposerTemplateサポート付き)
    • dcs-discourse-plugin(DcsIFrame.js.es6でURLパラメータ生成サポート付き)
  2. HTML属性を確認: トリガーにdata-dcs-composer-templateが正しく設定されていることを確認します
  3. ネットワークを検査: ブラウザの開発者ツールの[Network]タブを確認し、URLパラメータが追加されているか確認します

バージョン履歴

v1.0.0(現在)

  • 初期リリース
  • 設定可能な6つのテンプレートのサポート
  • URLパラメータに基づくテンプレート選択
  • Docussリンク用のコンポーザー自動オープン
  • SessionStorageの永続性
  • トラブルシューティングのためのデバッグモード

貢献

バグを見つけましたか、それとも機能リクエストがありますか?GitHubリポジトリでイシューを開いてください。

ライセンス

このコンポーネントはオープンソースであり、MITライセンスの下で利用可能です。

クレジット

Andy@Focallocalが、任意のウェブサイトにDiscourseディスカッションを埋め込むためのシステムであるDocussと連携して開発しました。