Отфильтрованные списки тем

:information_source: Сводка Позволяет создавать пользовательские списки тем с использованием фильтров. Списки затем можно отображать в выбранных плагин-аутлетах для выбранных страниц.
:eyeglasses: Предпросмотр Theme Creator
:hammer_and_wrench: Репозиторий https://github.com/gormus/discourse-filtered-topic-lists
:question: Руководство по установке Как установить тему или компонент темы
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

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

Позволяет создавать пользовательские списки тем с использованием фильтров тем. Списки затем можно отображать на выбранных страницах в выбранных плагин-аутлетах.

Вы можете создать столько списков, сколько необходимо, задать их заголовки, количество тем для отображения, какие фильтры использовать для запроса и, что самое главное, на каких страницах и в каких местах этих страниц они должны отображаться.

Обязательно ознакомьтесь с экспериментальной функцией фильтрации списков тем и поддерживаемыми фильтрами:

Настройки

  • Заголовок: Необязательный текст заголовка; если он указан, он отображается над списком тем.

  • Длина: Количество тем для отображения.

  • Запрос: Запрос для фильтрации списка.

  • Плагин-аутлет: Отобранные списки тем можно разместить в следующих плагин-аутлетах/областях:

    • below-site-header
    • above-main-container
    • before-topic-list
    • after-topic-list
    • topic-list-bottom
    • main-outlet-bottom
    • before-main-outlet
  • Показывать на: Страница, на которой будет отображаться список.

    • everywhere: Отображать на каждой странице, кроме страниц /admin.
    • homepage
    • top_menu: Проверьте настройки вашего верхнего меню для включенных страниц.
    • categories: Страница /categories.
    • latest: Страница /latest.
    • top
    • new
    • unread
    • read
    • posted
    • bookmarks
    • hot
    • selected_categories:
    • selected_tags
  • Выбранные категории: Когда настройка “Показывать на” установлена в значение selected_categories, используются категории, выбранные в этом поле. Список тем будет отображаться только на этих страницах категорий.

  • Выбранные теги: Когда настройка “Показывать на” установлена в значение selected_tags, используются теги, выбранные в этом поле. Список тем будет отображаться только на этих страницах тегов.

Плагин-аутлеты

Все доступные плагин-аутлеты отображаются с красной пунктирной линией вокруг них.

Вдохновение

Меня вдохновила тема-компонент Featured Lists. Однако в итоге мне потребовалось менее предвзятое и более гибкое решение для моего проекта.

Обязательно ознакомьтесь с ней:

25 лайков

Это довольно круто.

Используются ли те же целевые классы, чтобы вы могли стилизовать свой компонент?

Можете добавить несколько примеров пользовательских списков в нескольких магазинах?

Спасибо

1 лайк

Да, таблицы отфильтрованного списка тем используют те же CSS-классы, что и основная таблица topic-list. Кроме того, есть обёрточные элементы DIV с классами, которые помогут вам настроить таблицы topic-list в любом плагине-выходе (plugin-outlet).

Ниже представлена иерархия; обратите внимание, что .topic-list — это идентификатор по умолчанию для элемента TABLE. Вы также можете выбирать конкретные plugin-outlet для применения различных стилей, если это необходимо; см. второй блок кода:

.filtered-topics-list {
    &__wrapper {
    }

    &__header {
        h2 {
        }
    }

    &__content.topic-list {
    }
}

.filtered-topics-list {
    &.below-site-header,
    &.above-main-container,
    &.before-topic-list,
    &.after-topic-list,
    &.topic-list-bottom,
    &.main-outlet-bottom,
    &.before-main-outlet {

        &__wrapper {
        }

        &__header {
            h2 {
            }
        }

        &__content.topic-list {
        }
    }
}

У меня нет демонстрационного сайта, который я мог бы показать, но я поделился скриншотом, на котором отображены все доступные plugin-outlet с различными отфильтрованными списками тем.

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

2 лайка

Я использую /latest в качестве главной страницы. Я добавил последние темы из конкретных категорий на свою главную страницу с помощью этого компонента, но хочу удалить стандартный компонент последних тем Discourse с бесконечной прокруткой. Я сделал это с помощью CSS, но это влияет и на другие страницы. Возможно ли с помощью CSS-селекторов нацелиться на компонент последних тем только на главной странице?

3 лайка

Я полагаю, вам нужно запросить маршрут и добавить пользовательский класс с помощью JavaScript. Вот пример, которому вы можете следовать:

https://gitlab.com/manuelkostka/discourse/helpers/css-classes/-/blob/main/javascripts/discourse/api-initializers/css-classes.js?ref_type=heads

3 лайка

Нашёл баг (или ожидаемое поведение?):

Установка «Фильтр списка по умолчанию: без подкатегорий» в категории предотвращает отображение любых отфильтрованных списков тем в любом из каналов.

Протестировано на последней стабильной версии 3.3.1.

3 лайка

Привет, @jrgong, не мог бы ты поделиться скриншотом своего пресета?

2 лайка

Отправил вам личное сообщение с моим пресетом

Ещё один вопрос: какой лучший способ скрыть основной список тем при отображении отфильтрованного списка в конкретной категории?

Единственный способ, который я нашёл через CSS, — это нацеливание на тег span, но это может срабатывать в разных ситуациях:

span + table.topic-list.topic-thumbnails-grid {
  display: none;
}

Привет @jrgong, я могу подтвердить ваши наблюдения.

Шаги для воспроизведения:

  1. Создайте категорию и подкатегорию. Например, Top Level Category и Top Level Category > Sub Category.
  2. Откройте настройки Top Level Category (/c/top-level-category/edit/settings).
  3. В разделе «Appearance» найдите настройку Default List Filter.
  4. Измените значение с all topics на no subcategories.
  5. Настройте новый пресет в компоненте «Filtered Topics Lists» для отображения его содержимого в обеих категориях: верхней и подкатегории.
    1. Установите Show on = selected_categories.
    2. Установите Selected categories = Top Level Category, Sub Category.
    3. Установите Plugin Outlet = (any).
  6. Просмотрите страницы каждой категории.

Что ожидается?

Обе страницы категорий должны отображать результаты настроенного пресета в выбранном выходном плагином.

Что обнаружено?

  1. Любая категория с настройкой Default List Filter = no subcategories не показывает списки отфильтрованных тем, независимо от наличия подкатегорий.
  2. Однако, если установлено Show on = everywhere, список отфильтрованных тем отображается в выбранном выходе.

Похожие проблемы:

2 лайка

Когда я добавляю пользовательское поле, например, фильтр под названием X с 10 последними темами, и когда эти 10 тем прокручиваются, и предположим, что раздел «Последние» начинает отображаться, и если одна или несколько из этих тем всё ещё присутствуют, они показываются в обоих разделах. Есть ли способ скрыть их из раздела «Последние» или из фильтра?

1 лайк

Отличная функциональность плагина! :+1:

Вопрос: Plugin Outlet : before-main-outlet

Как заставить это отображаться? Я не вижу этого элемента. Нужно ли мне включить или отключить что-то в стандартной теме, чтобы он появился справа, как показано на графике Layton?

Хм, я его нашёл, или, по крайней мере, на мгновение заметил, так как он появляется внизу бесконечной прокрутки, а не справа, как предполагалось или ожидалось из визуального руководства.

Страница бесконечно дублировала сама себя на странице администрирования компонента после сохранения настроек в редакторе настроек объекта.

Ошибку, отображаемую в консоли браузера, можно использовать для определения причины.

1 лайк