AstonJ
(AstonJ)
1
Seguindo o conselho aqui Afastando-se de Discourse.SiteSettings: um guia de atualização:
Quando faço isso, recebo: TypeError: undefined is not an object (evaluating 'settings.tag_style')
Isso está em um componente que criei com um script no cabeçalho (nenhuma das outras opções mencionadas por Robin funciona também).
Há mais alguma coisa que eu possa tentar? Devo continuar usando Discourse.SiteSettings?
3 curtidas
eviltrout
(Robin Ward)
2
Você pode compartilhar seu código, incluir a tag de script HTML?
2 curtidas
AstonJ
(AstonJ)
3
Aqui está para você 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>
Tudo o que ele faz é alterar esta linha:
path = `https://site.com/${tag}`;
(Handlebars.Utils.escapeExpression(tag); também não está funcionando)
1 curtida
eviltrout
(Robin Ward)
4
Aha, entendi. settings nesse caso aponta para as configurações do tema, que são muito mais comuns para temas/plugins.
Atualizei a documentação com como acessar as configurações do site. Você pode fazer assim:
<script type="text/discourse-plugin" version="0.1">
let siteSettings = api.container.lookup('site-settings:main');
</script>
3 curtidas
AstonJ
(AstonJ)
5
Obrigado Robin - funciona 
Alguma ideia de como corrigir Handlebars.Utils.escapeExpression?
eviltrout
(Robin Ward)
6
Você deve ser capaz de importar nosso helper:
const { escapeExpression } = require('discourse/lib/utilities');
3 curtidas