Компонент включает несколько блоков, которые можно отображать в боковой панели:
popular-tags
top-contributors
recent-replies
category-topics
custom-html
category-list
subcategory-list
upcoming-events-list*
minimal-gamification-leaderboard**
Для заполнения списка лучших участников должно быть включено каталог пользователей. Если ваш список пуст, найдите в настройках администратора параметр enable user directory и убедитесь, что он включён.
* Доступно только при использовании плагина Calendar.
** Доступно только при использовании плагина Gamification.
Вы также можете использовать другие компоненты Ember в качестве блоков; вам просто нужно указать правильное имя. Например, ядро включает компонент Ember signup-cta, который можно использовать в боковой панели как есть. Обратите внимание, что нельзя использовать компоненты, требующие набора параметров, но вы можете создать собственный компонент Ember в отдельной теме и ссылаться на него только по имени в настройке blocks боковой панели.
Некоторые функции предоставленных блоков можно настраивать через параметры.
имя
описание
значение по умолчанию
значение
доступно для
count
ограничивает количество результатов
варьируется
число
все, кроме custom-html
excerptLimit
ограничивает длину каждого отрывка ответа
150
число
recent-replies
id
идентификатор категории
идентификатор категории (для category-list используется список через запятую)
Только для продвинутых пользователей: ограничить боковую панель выбранными маршрутами. Примеры: discovery.latest, discovery.unread, discovery.new, discovery.top, tag.show, “c/category-slug” (для категорий), “tag/sample-tag” (для тегов). Если пусто, боковая панель отображается на всех маршрутах списков.
blocks: выберите блоки для отображения и настройте их порядок
show_in_routes: определите, на каких маршрутах списков тем отображать боковую панель. По умолчанию она отображается на всех маршрутах discovery, кроме /categories.
Обратите внимание, что компонент поставляется с очень базовой стилизацией; предполагается, что администраторы, использующие компонент, добавят собственную стилизацию в своей теме.
Взаимодействия
При использовании вместе с плагином Discourse Calendar вы можете добавить блок боковой панели для предстоящих событий. Имя блока — upcoming-events-list, а формат даты можно настроить в соответствии с этим синтаксисом (например, MMMM D, YYYY).
Отлично, что это официальный компонент темы! Это действительно открывает новые возможности для кастомизации.
У меня два вопроса:
В боковой панели я хочу отображать список тем /latest так же, как это делает category-topics. Это возможно? recent-replies почти подходит (особенно если скрыть фрагмент), но мне нужно включать темы без ответов.
Можно ли отображать боковые блоки только в определённых категориях? Я имею в виду, что должен отображаться только список тем категории и только для указанных мною категорий.
Приносим извинения, документация по этому вопросу отсутствует (я обновлю её прямо сейчас). Имя параметра для custom-html — content.
У нас пока нет готового решения для полного списка /latest, но вы можете создать его самостоятельно и добавить в конфигурацию, используя его имя. Это должно быть очень похоже на списки категорий/тегов, только без фильтра.
На данный момент нет, вы не можете показывать их только в конкретных категориях. Однако вы можете использовать discovery.category в настройке show in routes, что позволит отображать боковую панель только на маршрутах категорий (но на всех них, а не на подмножестве).
Только что заметил ограничение компонента, особенно в отношении блоков category-topics и subcategory-list: добавление нескольких блоков любого из этих типов с разными id всегда приводило к тому, что в редакторе запуска (предположительно) отображались темы/подкатегории самого верхнего блока.
Одна из ошибок, с которой я сталкиваюсь прямо сейчас, заключается в том, что после примерно 10–12 попыток работы с блоком subcategory-list он полностью перестает отображаться на нашем тестовом сайте (см. видео ниже).
Блок subcategory-list не принимает никаких параметров. При использовании он отображает подкатегории текущей категории в зависимости от того, в какую категорию вы перешли… поэтому бессмысленно использовать этот блок более одного раза.
Именно поэтому subcategory-list не отображается в вашем видео. Если вы находитесь на маршруте, не относящемся к категории, этот блок не показывается.
Что касается category-topics, в вашем видео я вижу, что один и тот же ID используется дважды: 7. Я провел локальный тест, и при использовании разных ID отображаются разные темы (то есть мне не удалось воспроизвести сообщенную ошибку).
В данный момент такой опции нет. Имеет смысл её добавить, хотя, полагаю, она должна поддерживать несколько ID, чтобы можно было показывать блок для списка категорий (например, A, B и C). Я с радостью рассмотрю PR в репозитории, если ваши разработчики считают, что смогут это реализовать — это было бы отлично. (В противном случае я добавлю эту задачу в список желательных улучшений для компонента темы.)
Вы имеете в виду а) получение результатов и их кэширование на неделю или б) получение списка ведущих участников за последнюю неделю при каждой загрузке? Последнее должно быть легко добавить, кэширование же немного сложнее.
Компонент намеренно имеет очень мало стилей, чтобы потребители могли добавлять свои собственные стили в своих темах или компонентах тем.
Спасибо, этот PR отличный и уже принят!
Я также скоро займусь добавлением возможности настройки блока «Топ-вкладчиков» (или, если кто-то другой сделает это быстрее, буду рад рассмотреть его PR).
Я не уверен, где найти код для этого — не могли бы вы направить меня? Я хотел бы изучить возможность изменения категории-тем, чтобы отсутствие ID возвращало все категории (и, следовательно, фактически список /latest).
Было бы здорово иметь такую возможность во всех блоках!
Привет! Не уверен, что именно этот компонент вызывает ошибки. Но как только я его отключаю, ошибки исчезают. Не могли бы вы посмотреть на это и помочь мне разобраться в проблеме? Буду очень признателен.
Когда компонент включён, при посещении определённой темы на десктопе и нажатии на логотип сайта в верхней панели в попытке вернуться на главную страницу появляется бесконечный экран загрузки, а в консоли браузера возникают ошибки (как показано ниже). В логах по пути mysite/logs связанных записей не обнаружено.
d6ca234baf8d2d5e65f414f31e198fe956d9a939.js?__ws=www.bfsu.cafe:98 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'findFiltered')
at new CategoryTopics (d6ca234baf8d2d5e65f414f31e198fe956d9a939.js?__ws=www.bfsu.cafe:98:18)
at h.createComponent (base-component-manager.js:37:1)
at h.createComponent (ember-component-manager.js:54:1)
at C.create (manager.js:558:1)
at Object.evaluate (runtime.js:3301:1)
at Object.evaluate (runtime.js:1312:1)
at Dt.evaluateSyscall (runtime.js:5232:1)
at Dt.evaluateInner (runtime.js:5188:1)
at Dt.evaluateOuter (runtime.js:5180:1)
at Wt.next (runtime.js:6191:1)
at Wt._execute (runtime.js:6175:1)
at Wt.execute (runtime.js:6166:1)
at qt.handleException (runtime.js:5369:1)
at Kt.handleException (runtime.js:5605:1)
at Lt.throw (runtime.js:5302:1)
at Be.evaluate (runtime.js:2580:1)
at Lt._execute (runtime.js:5285:1)
at Lt.execute (runtime.js:5266:1)
at Ht.rerender (runtime.js:5634:1)
at Er.render (index.js:7578:1)
at index.js:7896:1
at It (runtime.js:5074:1)
at Rr._renderRoots (index.js:7876:1)
at Rr._renderRootsTransaction (index.js:7928:1)
at Rr._revalidate (index.js:7970:1)
at invoke (backburner.js:351:1)
at p.flush (backburner.js:241:1)
at h.flush (backburner.js:447:1)
at q._end (backburner.js:999:1)
at _boundAutorunEnd (backburner.js:648:1)
CategoryTopics @ d6ca234baf8d2d5e65f414f31e198fe956d9a939.js?__ws=www.bfsu.cafe:98
createComponent @ base-component-manager.js:37
createComponent @ ember-component-manager.js:54
create @ manager.js:558
(匿名) @ runtime.js:3301
evaluate @ runtime.js:1312
evaluateSyscall @ runtime.js:5232
evaluateInner @ runtime.js:5188
evaluateOuter @ runtime.js:5180
next @ runtime.js:6191
_execute @ runtime.js:6175
execute @ runtime.js:6166
handleException @ runtime.js:5369
handleException @ runtime.js:5605
throw @ runtime.js:5302
evaluate @ runtime.js:2580
_execute @ runtime.js:5285
execute @ runtime.js:5266
rerender @ runtime.js:5634
render @ index.js:7578
(匿名) @ index.js:7896
It @ runtime.js:5074
_renderRoots @ index.js:7876
_renderRootsTransaction @ index.js:7928
_revalidate @ index.js:7970
invoke @ backburner.js:351
flush @ backburner.js:241
flush @ backburner.js:447
_end @ backburner.js:999
_boundAutorunEnd @ backburner.js:648
Promise.then(异步)
n @ backburner.js:28
flush @ index.js:46
_scheduleAutorun @ backburner.js:1218
_end @ backburner.js:1009
_boundAutorunEnd @ backburner.js:648
Promise.then(异步)
n @ backburner.js:28
flush @ index.js:46
_scheduleAutorun @ backburner.js:1218
_end @ backburner.js:1009
_boundAutorunEnd @ backburner.js:648
Promise.then(异步)
n @ backburner.js:28
flush @ index.js:46
_scheduleAutorun @ backburner.js:1218
_end @ backburner.js:1009
_boundAutorunEnd @ backburner.js:648
Promise.then(异步)
n @ backburner.js:28
flush @ index.js:46
_scheduleAutorun @ backburner.js:1218
_ensureInstance @ backburner.js:1206
scheduleOnce @ backburner.js:845
k @ index.js:522
queueRerender @ mount-widget.js:124
scheduleRerender @ widget.js:319
rerenderResult @ widget.js:365
F @ hooks.js:207
(匿名) @ hooks.js:247
dispatch @ jquery.js:5430
_.handle @ jquery.js:5234
frame:251 Вы сняли флаг, но сторонние файлы cookie отключены в вашем браузере, поэтому флаг вернётся при следующем посещении страницы.
Я нашёл информацию об этом компоненте в JS-файле, упомянутом в первой строке лога ошибок выше.
Я заметил, что при его включении глобально исчезают весь заголовок и подвал (всё содержимое header.html и footer.html). Это было сделано намеренно? Но чтобы обойти это, мне приходится использовать PluginAPI для ручного добавления заголовка и подвала.