AstonJ
(AstonJ)
13. Februar 2022 um 00:16
1
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“
eviltrout
(Robin Ward)
14. Februar 2022 um 17:15
2
Können Sie Ihren Code teilen, einschließlich des HTML-Skript-Tags?
2 „Gefällt mir“
AstonJ
(AstonJ)
15. Februar 2022 um 00:46
3
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“
eviltrout
(Robin Ward)
16. Februar 2022 um 20:05
4
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“
AstonJ
(AstonJ)
16. Februar 2022 um 20:22
5
Danke Robin – es funktioniert
Irgendwelche Ideen, wie man Handlebars.Utils.escapeExpression repariert?
eviltrout
(Robin Ward)
17. Februar 2022 um 16:58
6
Sie sollten in der Lage sein, unseren Helfer zu importieren:
const { escapeExpression } = require('discourse/lib/utilities');
3 „Gefällt mir“