Discourse.SiteSettings funktioniert nach dem Upgrade nicht

Nachdem ich den Rat hier befolgt habe Umzug von Discourse.SiteSettings: Eine Anleitung zum Upgrade:

Wenn ich das tue, erhalte ich: TypeError: undefined is not an object (evaluating 'settings.tag_style')

Dies geschieht in einer Komponente, die ich mit einem Skript im Head erstellt habe (keine der anderen von Robin erwähnten Optionen funktioniert ebenfalls).

Gibt es noch etwas, das ich versuchen kann? Soll ich einfach weiterhin Discourse.SiteSettings verwenden?

3 „Gefällt mir“

Können Sie Ihren Code teilen, einschließlich des HTML-Skript-Tags?

2 „Gefällt mir“

Here ya go 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>

All it does is change this line:

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

(Handlebars.Utils.escapeExpression(tag); is not working either)

1 „Gefällt mir“

Aha, ich verstehe. settings verweist in diesem Fall auf Theme-Einstellungen, die für Themes/Plugins viel gebräuchlicher sind.

Ich habe die Dokumentation aktualisiert, wie auf die Website-Einstellungen zugegriffen werden kann. Sie können dies wie folgt tun:

<script type="text/discourse-plugin" version="0.1">
  let siteSettings = api.container.lookup('site-settings:main');
</script>
3 „Gefällt mir“

Danke Robin – es funktioniert :smiley:

Irgendwelche Ideen, wie man Handlebars.Utils.escapeExpression repariert?

Sie sollten in der Lage sein, unseren Helfer zu importieren:

const { escapeExpression } = require('discourse/lib/utilities');
3 „Gefällt mir“