Блоки правой боковой панели

:discourse2: Краткое описание Right Sidebar Blocks отображает боковую панель справа от списков тем с настраиваемым списком блоков.
:eyeglasses: Предпросмотр Предпросмотр в конструкторе тем Discourse
:hammer_and_wrench: Ссылка на репозиторий https://github.com/discourse/discourse-right-sidebar-blocks
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

Установить этот компонент темы

Возможности

Компонент включает несколько блоков, которые можно отображать в боковой панели:

  • popular-tags
  • top-contributors
  • recent-replies
  • category-topics
  • custom-html
  • category-list
  • subcategory-list
  • upcoming-events-list*
  • minimal-gamification-leaderboard**

:information_source: Для заполнения списка лучших участников должно быть включено каталог пользователей. Если ваш список пуст, найдите в настройках администратора параметр enable user directory и убедитесь, что он включён.

* Доступно только при использовании плагина Calendar.
** Доступно только при использовании плагина Gamification.

Вы также можете использовать другие компоненты Ember в качестве блоков; вам просто нужно указать правильное имя. Например, ядро включает компонент Ember signup-cta, который можно использовать в боковой панели как есть. Обратите внимание, что нельзя использовать компоненты, требующие набора параметров, но вы можете создать собственный компонент Ember в отдельной теме и ссылаться на него только по имени в настройке blocks боковой панели.

Некоторые функции предоставленных блоков можно настраивать через параметры.

имя описание значение по умолчанию значение доступно для
count ограничивает количество результатов варьируется число все, кроме custom-html
excerptLimit ограничивает длину каждого отрывка ответа 150 число recent-replies
id идентификатор категории идентификатор категории (для category-list используется список через запятую) category-topics, category-list
content содержимое для отображения html custom-html
scopeToCategory показывает только в категории или подкатегории X идентификатор категории popular-tags
excludedTags список исключённых тегов имена тегов popular-tags
displayInSpecificCategories список категорий, где отображается виджет все числа через запятую popular-tags
id идентификатор таблицы лидеров число minimal-gamification-leaderboard
tag какой тег отображать имя тега tag-topics
period временной период для топ-тем еженедельно все, yearly, quarterly, monthly, weekly, daily top-topics
title заголовок блока варьируется строка tag-topics, category-list, top-contributors
excludedGroupNames исключает указанные группы имена групп top-contributors
order порядок сортировки участников строка (likes_received или likes_given) top-contributors
period временной период для лучших участников ежегодно все, yearly, quarterly, monthly, weekly, daily top-contributors
upcomingDays события, начавшиеся до указанного значения 180 число upcoming-events-list
timeFormat формат даты/времени события LT формат momentjs upcoming-events-list

Настройки

Имя Описание
blocks
show in routes Только для продвинутых пользователей: ограничить боковую панель выбранными маршрутами.
Примеры: discovery.latest, discovery.unread, discovery.new, discovery.top, tag.show, “c/category-slug” (для категорий), “tag/sample-tag” (для тегов).
Если пусто, боковая панель отображается на всех маршрутах списков.

blocks: выберите блоки для отображения и настройте их порядок

show_in_routes: определите, на каких маршрутах списков тем отображать боковую панель. По умолчанию она отображается на всех маршрутах discovery, кроме /categories.

Перевод Значение по умолчанию
top_contributors.heading Лучшие участники
top_contributors.view_all Посмотреть всех
popular_tags.heading Популярные теги
popular_tags.view_all Посмотреть все
recent_replies.heading Недавние ответы
subcategory_list.heading Подкатегории
top_topics.heading Топ тем
category_list.heading Категории

Скриншоты

Обратите внимание, что компонент поставляется с очень базовой стилизацией; предполагается, что администраторы, использующие компонент, добавят собственную стилизацию в своей теме.

Взаимодействия

При использовании вместе с плагином Discourse Calendar вы можете добавить блок боковой панели для предстоящих событий. Имя блока — upcoming-events-list, а формат даты можно настроить в соответствии с этим синтаксисом (например, MMMM D, YYYY).


:discourse2: Размещено нами? Компоненты тем доступны для использования в наших тарифах Pro, Business и Enterprise.

63 лайка
Discourse Gamification
Sidebar for Subcategories
Add User leaderboard in sidebar
FKB Pro - Social theme
Setup Continuous Integration using GitHub Actions
Blogroll (feature request)
Topic List Previews (TLP)
Discourse Bars :beers: :cocktail: (a sidebar framework)
How to include a YouTube video or video widget on the community home page?
How to extend the Discourse sidebar?
Alternate presentation of sub-categories which puts the _top_ category first?
Adding a recent comments widget
Top Posters Widget?
FKB Pro - Social theme
Looking for the perfect theme
Discourse Bars :beers: :cocktail: (a sidebar framework)
Discourse Bars :beers: :cocktail: (a sidebar framework)
Add right sidebar gamification mini-leaderboard
Add right sidebar gamification mini-leaderboard
Pyx's Modern Theme
Custom Components -- add button or text at any plugin outlet
Adding ‘hot topics’ to the Sidebar
FKB Pro - Social theme
Homepage Blocks
Topic List Excerpts
🏷️ Bars Tag List Component
Discourse Bars :beers: :cocktail: (a sidebar framework)
When to switch themes/plugins to `.gjs`?
FKB Pro - Social theme
Recent replies takes 2 seconds to display
Leaderboard in homepage
Creating and installing plugins?
Discourse Gamification Plugin in the Header
Discourse Calendar updated to use fullcalendar 6
Customizing your site with existing theme components
I'm getting errors when I switch categories too quickly
目前我感觉看到的最好看的Discourse主题,有没有谁能爱心奉献一个
Creating and managing events
FKB Pro - Social theme
Displaying tags along with categories
Discourse Sidebar Blocks
Tag Icons + Tag Banners + Right Sidebar Blocks
Sidebar for Subcategories
Connectors not rendering
Creating a Top 20 leaderboard for a specific date range
How do you force keep open the sidebar?
Add social media handles on home page

Что мне указать в параметре «name», если я использую custom-html?

1 лайк

Отлично, что это официальный компонент темы! Это действительно открывает новые возможности для кастомизации.

У меня два вопроса:

  1. В боковой панели я хочу отображать список тем /latest так же, как это делает category-topics. Это возможно? recent-replies почти подходит (особенно если скрыть фрагмент), но мне нужно включать темы без ответов.

  2. Можно ли отображать боковые блоки только в определённых категориях? Я имею в виду, что должен отображаться только список тем категории и только для указанных мною категорий.

1 лайк

Приносим извинения, документация по этому вопросу отсутствует (я обновлю её прямо сейчас). Имя параметра для custom-htmlcontent.

У нас пока нет готового решения для полного списка /latest, но вы можете создать его самостоятельно и добавить в конфигурацию, используя его имя. Это должно быть очень похоже на списки категорий/тегов, только без фильтра.

На данный момент нет, вы не можете показывать их только в конкретных категориях. Однако вы можете использовать discovery.category в настройке show in routes, что позволит отображать боковую панель только на маршрутах категорий (но на всех них, а не на подмножестве).

3 лайка

Спасибо, возможно ли добавить боковую панель в каждую тему?

4 лайка

Только что заметил ограничение компонента, особенно в отношении блоков category-topics и subcategory-list: добавление нескольких блоков любого из этих типов с разными id всегда приводило к тому, что в редакторе запуска (предположительно) отображались темы/подкатегории самого верхнего блока.

Одна из ошибок, с которой я сталкиваюсь прямо сейчас, заключается в том, что после примерно 10–12 попыток работы с блоком subcategory-list он полностью перестает отображаться на нашем тестовом сайте (см. видео ниже).

2 лайка

Блок subcategory-list не принимает никаких параметров. При использовании он отображает подкатегории текущей категории в зависимости от того, в какую категорию вы перешли… поэтому бессмысленно использовать этот блок более одного раза.

Именно поэтому subcategory-list не отображается в вашем видео. Если вы находитесь на маршруте, не относящемся к категории, этот блок не показывается.

Что касается category-topics, в вашем видео я вижу, что один и тот же ID используется дважды: 7. Я провел локальный тест, и при использовании разных ID отображаются разные темы (то есть мне не удалось воспроизвести сообщенную ошибку).

4 лайка

Привет! Огромное спасибо за этот замечательный плагин!

У меня возник вопрос касательно боковой панели subcategory-list: есть ли возможность отображать её только для определённой категории?

Наши разработчики посмотрели, и похоже, что параметр id для subcategory-list не поддерживается. Не могли бы вы добавить эту возможность, пожалуйста?

2 лайка

Что касается блока top-contributors: есть ли способ получить результаты за неделю?

2 лайка

В данный момент такой опции нет. Имеет смысл её добавить, хотя, полагаю, она должна поддерживать несколько ID, чтобы можно было показывать блок для списка категорий (например, A, B и C). Я с радостью рассмотрю PR в репозитории, если ваши разработчики считают, что смогут это реализовать — это было бы отлично. (В противном случае я добавлю эту задачу в список желательных улучшений для компонента темы.)

Вы имеете в виду а) получение результатов и их кэширование на неделю или б) получение списка ведущих участников за последнюю неделю при каждой загрузке? Последнее должно быть легко добавить, кэширование же немного сложнее.

3 лайка

@pmusaraj, не могли бы вы добавить

padding: 3px 4px 3px 4px

для популярных тегов?

Спасибо.

1 лайк

Привет @pmusaraj, большое спасибо за ваш ответ!

Наш разработчик опубликовал PR здесь, пожалуйста, посмотрите: Implement the `displayInCategories` parameter which allows to specify a list of categories where the `subcategories-list` block is displayed by d521bb85 · Pull Request #10 · discourse/discourse-right-sidebar-blocks · GitHub

Второй вариант был бы идеален! Нам действительно нужно отображать список топ-контрибьюторов за последнюю неделю. Большое спасибо!

4 лайка

Компонент намеренно имеет очень мало стилей, чтобы потребители могли добавлять свои собственные стили в своих темах или компонентах тем.

Спасибо, этот PR отличный и уже принят!

Я также скоро займусь добавлением возможности настройки блока «Топ-вкладчиков» (или, если кто-то другой сделает это быстрее, буду рад рассмотреть его PR).

3 лайка

Я не уверен, где найти код для этого — не могли бы вы направить меня? Я хотел бы изучить возможность изменения категории-тем, чтобы отсутствие ID возвращало все категории (и, следовательно, фактически список /latest).

Было бы здорово иметь такую возможность во всех блоках!

2 лайка

@pmusaraj Супер! Большое спасибо за помощь, с нетерпением жду использования блока «Топ-вкладчиков» :slight_smile:

1 лайк

Привет! Не уверен, что именно этот компонент вызывает ошибки. Но как только я его отключаю, ошибки исчезают. :thinking: Не могли бы вы посмотреть на это и помочь мне разобраться в проблеме? Буду очень признателен.

Когда компонент включён, при посещении определённой темы на десктопе и нажатии на логотип сайта в верхней панели в попытке вернуться на главную страницу появляется бесконечный экран загрузки, а в консоли браузера возникают ошибки (как показано ниже). В логах по пути 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-файле, упомянутом в первой строке лога ошибок выше.

// строки 96–103 файла d6ca234baf8d2d5e65f414f31e198fe956d9a939.js?__ws=www.bfsu.cafe
      const filter = "c/" + categoryId;
      this.category = _category.default.findById(categoryId);
      this.store.findFiltered("topicList", {
        filter
      }).then(result => {
        const results = result.topic_list.topics;
        results.forEach(topic => {
          topic.url = "".concat((0, _getUrl.default)("/t/")).concat(topic.slug, "/").concat(topic.id);
1 лайк

Ах, да, извините за это. Это должно быть исправлено сейчас, вам просто нужно обновить компонент темы до последней версии.

3 лайка

Спасибо! Теперь работает отлично.

3 лайка

Привет, @pmusaraj, извините, если выгляжу навязчиво — просто хотел узнать, есть ли какие-то сроки реализации этой функции.

Это было бы отличным дополнением :slight_smile:

Спасибо большое!

3 лайка

Спасибо за этот замечательный компонент!

Я заметил, что при его включении глобально исчезают весь заголовок и подвал (всё содержимое header.html и footer.html). Это было сделано намеренно? Но чтобы обойти это, мне приходится использовать PluginAPI для ручного добавления заголовка и подвала.

2 лайка