업그레이드 후 Discourse.SiteSettings가 작동하지 않습니다

여기 있는 조언 Discourse.SiteSettings에서 벗어나기: 업그레이드 가이드를 따랐습니다:

이렇게 하면 TypeError: undefined is not an object (evaluating 'settings.tag_style') 오류가 발생합니다.

이것은 제가 head에 스크립트를 포함하여 만든 컴포넌트에서 발생하는 문제입니다 (Robin이 언급한 다른 옵션들도 모두 작동하지 않습니다).

다른 시도를 해볼 수 있는 방법이 있을까요? Discourse.SiteSettings를 계속 사용해야 할까요?

코드를 공유해 주시겠어요? HTML 스크립트 태그도 포함해서요.

요청하신 대로 드립니다, Robin:

<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); 도 작동하지 않습니다)

아, 그렇군요. 그 경우 settings는 테마 설정을 가리키는데, 이는 테마/플러그인에서 훨씬 더 흔합니다.

사이트 설정에 액세스하는 방법에 대한 문서를 업데이트했습니다. 이렇게 할 수 있습니다:

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

로빈, 고마워요. 잘 작동해요 :smiley:

Handlebars.Utils.escapeExpression를 어떻게 수정할 수 있을까요? 아이디어가 있으면 알려주세요.

다음과 같이 헬퍼를 가져올 수 있습니다:

const { escapeExpression } = require('discourse/lib/utilities');