AstonJ
(AstonJ)
13 فبراير 2022، 12:16ص
1
باتباع النصائح هنا الانتقال بعيدًا عن Discourse.SiteSettings: دليل الترقية :
عندما أفعل ذلك، أحصل على: TypeError: undefined is not an object (evaluating 'settings.tag_style')
هذا في مكون أنشأته بنص برمجي في الرأس (لا تعمل أي من الخيارات الأخرى التي ذكرها روبن أيضًا).
هل هناك أي شيء آخر يمكنني تجربته؟ هل يجب أن أستمر في استخدام Discourse.SiteSettings؟
3 إعجابات
eviltrout
(Robin Ward)
14 فبراير 2022، 5:15م
2
هل يمكنك مشاركة الكود الخاص بك، بما في ذلك علامة HTML النصية؟
إعجابَين (2)
AstonJ
(AstonJ)
15 فبراير 2022، 12:46ص
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)
16 فبراير 2022، 8:05م
4
أها، فهمت. تشير settings في هذه الحالة إلى إعدادات السمة، وهي أكثر شيوعًا للسمات/الإضافات.\n\nلقد قمت بتحديث التوثيق حول كيفية الوصول إلى إعدادات الموقع. يمكنك القيام بذلك بهذه الطريقة:\n\njs\n\u003cscript type=\"text/discourse-plugin\" version=\"0.1\"\u003e\n let siteSettings = api.container.lookup('site-settings:main');\n\u003c/script\u003e\n
3 إعجابات
AstonJ
(AstonJ)
16 فبراير 2022، 8:22م
5
شكرا روبن - إنه يعمل
أي أفكار حول كيفية إصلاح Handlebars.Utils.escapeExpression؟
eviltrout
(Robin Ward)
17 فبراير 2022، 4:58م
6
يجب أن تكون قادرًا على استيراد المساعد الخاص بنا:
const { escapeExpression } = require('discourse/lib/utilities');
3 إعجابات