# 升级后Discourse.SiteSettings无法正常工作

**URL:** https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006
**Category:** Development
**Tags:** plugin-api
**Created:** [2022 年2 月 13 日 00:16 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006 "2022-02-13T00:16:31Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### 作者： ![AstonJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/astonj/32/215041_2.png) [@AstonJ](https://meta.discourse.org/u/AstonJ)
#### 发布日期： [2022 年2 月 13 日 00:16 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006/1 "2022-02-13T00:16:31Z")

</div>

遵循此处建议 [弃用 Discourse.SiteSettings：升级指南](https://meta.discourse.org/t/moving-away-from-discourse-sitesettings-an-upgrading-guide/158977)：

> [@eviltrout](#):
>
> 如果您通过脚本标签嵌入 discourse 代码，则可以使用 `settings` 来访问站点设置。

当我这样做时，我得到：`TypeError: undefined is not an object (evaluating 'settings.tag_style')`

这是在我创建的一个带有头部脚本的组件中（Robin 提到的其他选项也不起作用）。

我还能尝试什么吗？我应该继续使用 `Discourse.SiteSettings` 吗？

---

<div class="post-metadata">

### 作者： ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### 发布日期： [2022 年2 月 14 日 17:15 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006/2 "2022-02-14T17:15:36Z")

</div>

可以分享你的代码，包括 HTML 脚本标签吗？

---

<div class="post-metadata">

### 作者： ![AstonJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/astonj/32/215041_2.png) [@AstonJ](https://meta.discourse.org/u/AstonJ)
#### 发布日期： [2022 年2 月 15 日 00:46 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006/3 "2022-02-15T00:46:42Z")

</div>

给你，Robin：

```plaintext
<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>

```

它所做的只是更改这一行：

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

```

（`Handlebars.Utils.escapeExpression(tag);` 也不起作用）

---

<div class="post-metadata">

### 作者： ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### 发布日期： [2022 年2 月 16 日 20:05 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006/4 "2022-02-16T20:05:39Z")

</div>

啊，我明白了。在这种情况下，`settings` 指的是主题设置，这对于主题/插件来说更为常见。

我已经更新了文档，说明了如何访问站点设置。你可以这样做：

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

```

---

<div class="post-metadata">

### 作者： ![AstonJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/astonj/32/215041_2.png) [@AstonJ](https://meta.discourse.org/u/AstonJ)
#### 发布日期： [2022 年2 月 16 日 20:22 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006/5 "2022-02-16T20:22:08Z")

</div>

谢谢 Robin - 它奏效了 😃

有什么办法可以修复 `Handlebars.Utils.escapeExpression` 吗？

---

<div class="post-metadata">

### 作者： ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### 发布日期： [2022 年2 月 17 日 16:58 UTC](https://meta.discourse.org/t/discourse-sitesettings-not-working-after-upgrade/218006/6 "2022-02-17T16:58:29Z")

</div>

您应该能够导入我们的辅助函数：

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

```
