トップメニュー ログアウトボタン テーマコンポーネント

ウィジェットの使用は推奨しません。コアの近代化の一環として、最終的には廃止される予定です。

api.addToHeaderIconsについても同様で、api.headerIcons.addに置き換えられ、現在は非推奨となっています。

以下にいくつかの提案をします。

  • テーマコンポーネントを作成する際は、GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes を参考にすることをお勧めします。最新の設定ファイルが含まれており、コードのリンティング/整形に役立ち、標準的な構造を持つ良い習慣です。

  • \u003ctemplate\u003e 構文を使用する場合は、ファイル名を .gjs (glimmer JS) に変更してください。そうしないと、正しく機能しない可能性があります。

  • 私の例では、テンプレートをファイルに移動させることができます。例えば、次のようになります。
    /javascripts/discourse/components/logout-header-button.gjs

    import DButton from "discourse/components/d-button";
    import routeAction from "discourse/helpers/route-action";
    
    const LogoutHeaderButton = \u003ctemplate\u003e
      \u003cli class="logout"\u003e
        \u003cDButton
          @action={{routeAction "logout"}}
          class="btn-flat icon"
          @icon="sign-out-alt"
          @title="user.log_out"
          @label="user.log_out"
        /\u003e
      \u003c/li\u003e
    \u003c/template\u003e;
    
    export default LogoutHeaderButton;
    

    次に、イニシャライザでコンポーネントをインポートし、headerIcons のパラメータとして使用します。

    import LogoutHeaderButton from "../components/logout-header-button";
    
    export default apiInitializer("1.28.0", (api) =\u003e {
      if (api.getCurrentUser()) {
        api.headerIcons.add("logout", LogoutHeaderButton, { before: "auth" });
      }
    });
    
    
  • ボタンの配置は調整可能です。ドキュメントを参照してください。

    https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.gjs#L1838-L1886

    ご不明な点がございましたらお知らせください。必要であれば、後でPRを作成して例を示すことも可能です。:+1: