Следуя документации здесь Developing Discourse Themes & Theme Components
Пример с использованием log работает отлично, но когда я обновляю виджет до
{{mount-widget widget="hamburger-categories"}}
Ничего не появляется… Я прошелся по списку здесь https://github.com/discourse/discourse/tree/main/app/assets/javascripts/discourse/app/widgets , и некоторые виджеты отображаются, а некоторые нет?
В конечном итоге я хочу использовать только список категорий в виде кнопок внутри пользовательского заголовка, вот так…
merefield
(Robert)
20.Февраль.2023 14:13:52
2
Вы активировали новую боковую панель? Это скроет старое гамбургер-меню.
Убедитесь, что настройки вашего сайта выглядят так:
Я установил значение «Header Dropdown», затем изменил на «Legacy», но проблема осталась прежней.
Меню-гамбургер отображается, но мне нужны только категории
{{mount-widget widget="hamburger-menu"}}
merefield
(Robert)
20.Февраль.2023 14:27:57
5
Извините, я растерялся из-за названия виджета. Какой плагин outlet вы используете?
то же самое, что и в документации
<script type="text/x-handlebars" data-template-name="/connectors/below-footer/fancy-footer">
<div class="footer">
<div class="wrap">
<p>перед монтированием виджета</p>
{{mount-widget widget="home-logo"}}
{{mount-widget widget="hamburger-categories"}}
<p>после монтирования виджета</p>
</div>
</div>
</script>
merefield
(Robert)
20.Февраль.2023 15:01:38
8
Если вы посмотрите на руководство, то увидите, что плагин-оутлет принимает атрибут showFooter. Вероятно, он установлен в false. Это означает, что ни подвал, ни прикрепленный виджет отображаться не будут.
В любом случае, зачем нужен оутлет подвала для артефакта заголовка?
На мой взгляд, лучше использовать компонент темы плагин-оутлетов, чтобы выбрать более подходящее место.
Это отображается… оно показывает widget=“home-logo”
и также показывает widget=“hamburger-menu”
но не показывает widget=“hamburger-categories”
Просто тестирую, сейчас не так важно, где это находится
merefield
(Robert)
20.Февраль.2023 15:13:48
10
Есть ли ошибки в консоли?
Что отображается в инспекторе?
Я вижу здесь категории, значит, они существуют..
merefield
(Robert)
20.Февраль.2023 15:19:49
13
Мой предположение, что проблема здесь:
if (!siteSettings.allow_uncategorized_topics) {
categories = categories.filter(
(c) => c.id !== site.uncategorized_category_id
);
}
const moreCount = categories.length - maxCategoriesToDisplay;
categories = categories.slice(0, maxCategoriesToDisplay);
return this.attach("hamburger-categories", { categories, moreCount });
},
footerLinks(prioritizeFaq, faqUrl) {
const { attrs, capabilities, settings, site, siteSettings, state } = this;
const links = [];
if (settings.showAbout) {
links.push({
route: "about",
className: "about-link",
Атрибут categories не передаётся через футер-аутлет.
но когда я использую widget=
merefield
(Robert)
20.Февраль.2023 15:30:15
15
Если бы вы сразу опубликовали это сообщение об ошибке, это сэкономило бы много времени.
Всегда проверяйте консоль.
Возможно, вам потребуется подключить этот элемент с помощью JavaScript после получения списка категорий, точно так же, как это делает меню-гамбургер.
Да, определенно, и ещё больше времени, если бы документация не писала: «Теперь, подключение виджета довольно просто, всё, что вам нужно знать, это имя виджета. Всё».
merefield
(Robert)
20.Февраль.2023 16:09:15
17
Да, я так думаю, что это руководство устарело?
Вы не знаете, где найти самое актуальное руководство? Я летаю здесь в поисках ответов, но натыкаюсь на посты четырёхлетней давности. Существует ли где-то официальное руководство?
Да, я понимаю, как это может вводить в заблуждение… технически виджет действительно подключается, но это не означает, что данные, необходимые для его работы, становятся автоматически доступными.
Вы можете попробовать передать категории в виджет следующим образом:
{{mount-widget widget="hamburger-categories" args=(hash categories=this.site.categories)}}
Отлично, спасибо.. да, это имеет смысл и теперь отображается
Так как мы говорим здесь о логировании в консоли,
следуя документации Developing Discourse Themes & Theme Components ,
когда я пытаюсь
<script type="text/discourse-plugin" version="0.8">
console.log(Discourse)
</script>
Я не уверен, что получаю «глобальный объект в консоль» — у меня получается класс.
А если я попробую что-то вроде
<script type="text/discourse-plugin" version="0.8">
const settings = Discourse.SiteSettings;
console.log(settings)
</script>
то получаю эту ошибку:
THEME 6 'BCN Theme - watched locally'] Уведомление об устаревании: используйте injected siteSettings вместо Discourse.SiteSettings