Discourse.SiteSettings がアップグレード後に機能しない

meta.discourse.org/t/moving-away-from-discourse-sitesettings-an-upgrading-guide/158977 のアドバイスに従っています。

これを実行すると、「TypeError: undefined is not an object (evaluating ‘settings.tag_style’)」というエラーが発生します。

これは、ヘッドにスクリプトを含むコンポーネントで発生しています(Robin が言及した他のオプションはどれもうまくいきません)。

他に試せることはありますか? Discourse.SiteSettings を使い続けるべきでしょうか?

「いいね!」 3

コードを共有していただけますか。HTMLスクリプトタグを含めてください。

「いいね!」 2

承知いたしました、ロビンさん。

<script type="text/discourse-plugin" version="0.1">
  const getURL = require('discourse-common/lib/get-url').default;

  function customLinkTagRenderer(tag, params) {
    params = params || {};
    const visibleName = Handlebars.Utils.escapeExpression(tag);
    tag = visibleName.toLowerCase();
    const classes = ["discourse-tag"];
    const tagName = params.tagName || "a";
    let path;
    if (tagName === "a" && !params.noHref) {
      if (params.isPrivateMessage && Discourse.User.current()) {
        const username = params.tagsForUser
          ? params.tagsForUser
          : Discourse.User.current().username;
        path = `/u/${username}/messages/tags/${tag}`;
      } else {
        path = `https://site.com/${tag}`;
      }
    }
    const href = path ? ` href='${getURL(path)}' ` : "";

    if (Discourse.SiteSettings.tag_style || params.style) {
      classes.push(params.style || Discourse.SiteSettings.tag_style);
    }

	  let val =
	    "<" +
	    tagName +
	    href +
	    " data-tag-name=" +
	    tag +
	    " class='" +
	    classes.join(" ") +
	    "'>" +
	    visibleName +
	    "</" +
	    tagName +
	    ">";

    if (params.count) {
      val += " <span class='discourse-tag-count'>x" + params.count + "</span>";
    }

    return val;
  }

  api.replaceTagRenderer(customLinkTagRenderer);
</script>

変更したのはこの行だけです。

path = `https://site.com/${tag}`;

Handlebars.Utils.escapeExpression(tag);も機能していません)

「いいね!」 1

なるほど、そういうことでしたか。その場合、settings はテーマ設定を指しており、テーマやプラグインではより一般的です。

サイト設定へのアクセス方法について、ドキュメントを更新しました。次のように行うことができます。

<script type="text/discourse-plugin" version="0.1">
  let siteSettings = api.container.lookup('site-settings:main');
</script>
「いいね!」 3

ロビン、ありがとう。うまくいきました :smiley:

Handlebars.Utils.escapeExpression を修正する方法について、何かアイデアはありますか?

ヘルパーをインポートできるはずです。

const { escapeExpression } = require('discourse/lib/utilities');
「いいね!」 3