AstonJ
(AstonJ)
1
meta.discourse.org/t/moving-away-from-discourse-sitesettings-an-upgrading-guide/158977 のアドバイスに従っています。
これを実行すると、「TypeError: undefined is not an object (evaluating ‘settings.tag_style’)」というエラーが発生します。
これは、ヘッドにスクリプトを含むコンポーネントで発生しています(Robin が言及した他のオプションはどれもうまくいきません)。
他に試せることはありますか? Discourse.SiteSettings を使い続けるべきでしょうか?
「いいね!」 3
eviltrout
(Robin Ward)
2
コードを共有していただけますか。HTMLスクリプトタグを含めてください。
「いいね!」 2
AstonJ
(AstonJ)
3
承知いたしました、ロビンさん。
<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);も機能していません)
「いいね!」 1
eviltrout
(Robin Ward)
4
なるほど、そういうことでしたか。その場合、settings はテーマ設定を指しており、テーマやプラグインではより一般的です。
サイト設定へのアクセス方法について、ドキュメントを更新しました。次のように行うことができます。
<script type="text/discourse-plugin" version="0.1">
let siteSettings = api.container.lookup('site-settings:main');
</script>
「いいね!」 3
AstonJ
(AstonJ)
5
ロビン、ありがとう。うまくいきました 
Handlebars.Utils.escapeExpression を修正する方法について、何かアイデアはありますか?
eviltrout
(Robin Ward)
6
ヘルパーをインポートできるはずです。
const { escapeExpression } = require('discourse/lib/utilities');
「いいね!」 3