テーマやコンポーネントにアセット(画像、フォントなど)を含める

テーマとテーマコンポーネントを使用すると、画像やフォントなどのアップロードされたアセットを処理できます。サイト設定 theme authorized extensions を使用して、テーマが受け入れるアセットを制御できます。

テーマとコンポーネントへのアセットの組み込み

リモートテーマの場合

リモートテーマには以下が含まれます。

  • テーマの [kbd]人気[/kbd] リストからインストールされたテーマとコンポーネント
  • [kbd]gitリポジトリから[/kbd] の方法を使用してインストールされたテーマとコンポーネント

リモートテーマまたはテーマコンポーネントにアセットをアップロードするには、詳細な例として Create and share a font theme component を参照してください。

ローカルテーマとコンポーネントへのアセットのアップロード

ローカルテーマには以下が含まれます。

  • すべての Discourse インスタンスに付属するデフォルトの Light および Dark テーマ
  • [kbd]+ 新規作成[/kbd] のインストール方法を使用して作成されたテーマとコンポーネント
  • [kbd]デバイスから[/kbd] のインストール方法を使用してローカルコンピューターからアップロードされたテーマとコンポーネント。

ローカルテーマまたはテーマコンポーネントにアセットをアップロードするには、テーマまたはコンポーネントに移動し、アップロードセクションの [kbd]+ 追加[/kbd] を選択します。

「アップロードの追加」モーダルでファイルを選択し、CSS、javascript、および/またはhandlebarsのカスタマイズで使用するSCSS変数名を入力します。

アップロードされると、アセットがアップロードリストに表示されます。

:warning: 重要なお知らせ: gitリポジトリからリモートでインストールされたコンポーネントの場合、管理インターフェイスを介してテーマやコンポーネントにアップロードを追加しないでください。コンポーネントの更新により、gitリポジトリに含まれていなかったアップロードはすべて消去されます。

アセットの使用方法

SCSS

@font-face {
  font-family: Amazing;
  src: url($Comic-Sans) format("woff2");
}

body {
  font-family: Amazing;
  font-size: 15px;
}

.d-header {
  background-image: url($texture);
}

:information*source: _ttf または otf フォントを使用する場合は、フォーマットを opentype にすることを確認してください。_

Javascript

// {theme}/javascripts/discourse/api-initializers/init-theme.gjs

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  console.log(settings.theme_uploads.balloons);
});

HTML

テーマアセットをバニラHTML(カスタマイズ管理パネルのヘッダーセクションやヘッダー後のセクションなど)に直接追加することはできません。handlebarsテンプレートまたはプラグインAPIを使用する必要があります(これらについては Developing Discourse Themes & Theme Components で詳しく説明されています)。

回避策の1つは、SCSSを使用してアセットを背景画像として読み込むことです(上記の例のように)。そのため、テーマのヘッダーセクションで次のように追加する場合があります。

<div class="my-custom-div">
  <a href="/"></a>
</div>

そして、CSSで次のようにします。

.my-custom-div a {
  height: 50px;
  width: 100px;
  background-image: url($asset-name);
}

テーマのアップロードを設定としてアクセスする

theme_uploads をJavaScriptの設定として扱うこともできます(関連コミット)。

これにより、テーマとコンポーネントがテーマアセットにアクセスできるようになります。

テーマのjs内では、次のようにしてアセットのURLを取得できます。

settings.theme_uploads.name

追加情報


このドキュメントはバージョン管理されています - 変更の提案はgithubで行ってください。

「いいね!」 30

ソーシャルメディアアイコン用にアセットディレクトリに5つのSVGファイルを作成しました指示通りにすべてをabout.jsonに追加しました。これはCreate and Share a font theme componentで示されています。CSSのbody_tag.htmlで使用しています。

期待される結果: アイコンが読み込まれるはずです。

実際の結果: アイコンが表示されません。開発者ツールでは、ブラウザがこれらのアイコンを登録済み画像として認識していることは示されていますが、データがありません。

何が足りないのでしょうか?ビルドステップのようなものはありますか?

「いいね!」 1