Традиционная многоуровневая иерархия против плоской иерархии дискурса

Мне трудно убедить нашу организацию отказаться от возврата к традиционному форуму с несколькими уровнями иерархии, которые часто приводят к мучительной процедуре «кликни и беги». См. Пришло время поговорить о тегах
Мне нужны аргументы, подтверждающие, что такая организация легко реализуема с помощью тегов без необходимости что-либо вводить в поле поиска.
Будет здорово, если будут получены ответы на следующие вопросы.

У нас есть сеть поддержки локальных узлов, которая будет расти по всему миру, аналогично категории «Local Groups» на https://discuss.okfn.org. Там все локации покрыты подкатегориями. Это правильное решение, если не опускаться до уровня города, как нам приходится делать.
Я представляю себе следующую структуру:

  1. категория: локальные узлы
  2. тег: континент (нужно обсудить, имеет ли это смысл)
  3. подкатегория: страна (страна должна быть хорошо визуализирована, поэтому континент — это тег)
  4. тег: город

Есть ли возможность навигации только по тегам, используя иерархию групп тегов, например:

  1. переход от Азии к Японии
    1. Континенты
    2. Страны
  2. переход от Европы к Риму
    1. Континенты
    2. Страны
    3. Города

Я пока не нашел способа реализовать это через панель навигационных полей. Также не нашел способа автоматического присвоения тем тегов на основе названия их подкатегории и родительской категории, чтобы это работало.
Мне известны следующие ресурсы:

Кроме того (для начала :slight_smile:) :

  1. Как включить/когда отображается «Поиск» в поиске по тегам?

  2. Интегрировать поиск по тегам в поиск по категории (я знаю, что есть поле поиска в правом верхнем углу, но оно также выводит темы)

В конечном итоге я хотел бы отображать карту мира в категории «local-nodes», позволяющую приближать интересующую локацию.
Я надеюсь, что смогу использовать карту, показанную на Locations Plugin 🌍, плагин Data Explorer Discourse Data Explorer и плагин Custom Layouts, возможно, интегрированные в Discourse Category Banners.
На данный момент мне известны только:

Это должно выглядеть примерно так:

Я немного подумал над этим. Ранее я экспериментировал с трёхуровневой системой категорий и различными системами навигации на основе тегов.

категория: локальные узлы
тег: континент (нужно обсудить, имеет ли это смысл)
подкатегория: нация (нацию нужно хорошо визуализировать, поэтому континент выступает в роли тега)
тег: город

Я думаю, что вам по сути нужен выпадающий список тегов, специфичный для определённой tag_group, где сама tag_group определяется контекстом категории (чтобы поддерживать разные группы городов для подкатегорий наций).

Что касается размещения карт не только в списке тем, но и внутри поста, плагин Locations предоставляет компонентную карту, которую можно вставить на страницу категории.

Оба варианта можно реализовать с помощью компонента темы. Если вам нужна помощь в создании такого компонента, я могу дать несколько подсказок, если вы захотите попробовать сделать это самостоятельно, или вы можете нанять Pavilion, чтобы они сделали это за вас.

Большое спасибо за положительную обратную связь! Значит, всё, кроме карты, мы можем сделать сами :smiley:, но нам придётся немного написать код, чтобы настроить тему так, как нам нравится.

Чтобы понять план реализации, подтвердите, поправьте, дополните или ответьте на следующие вопросы:

  1. :question: Убедиться, что мы можем создавать бесконечные (ограниченные только размером страницы) выпадающие списки тегов с выбором тегов на основе предыдущего выпадающего списка.
    @angus, можете ли вы подтвердить, что это в принципе возможно?
  2. :question: Можно ли объединить поиск по категориям и тегам, как было запрошено в пункте 2 в последнем (третьем) списке.
  3. :factory: Создать иерархию тегов, сопоставимую с той, что показана в первом посте. Это фундаментально: без этого проект обречён.
  4. :factory: Внедрить автоматическое проставление тегов.
    1. :question: :arrow_forward: :factory: Можно ли это сделать только с помощью плагина, как указано в Topic auto tagging?
      :arrow_right: См. Tags: category restrictions, tag groups, relationships
  5. :factory: Реализовать улучшенную версию Location Plugin :star_struck:

Если мы пойдём по этому пути, я обязательно воспользуюсь вашим щедрым предложением.

Сейчас это маловероятно, так как наше сообщество только делает первые шаги, доходы будут очень низкими, к тому же мы некоммерческая организация.

Ответ на этот вопрос можно найти здесь: Set up structured tagging with tag groups and category tag restrictions

В принципе, всё возможно.

Например, ранее я создавал трёхуровневую иерархию категорий, которая также поддерживает множественные пересечения тегов на уровне категорий.

Структура маршрутов для трёхуровневой иерархии категорий с множественными пересечениями тегов
scope "/multi" do
  constraints(tag_id: /[^\/]+?/, format: /json|rss/) do
     get '/c/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_category_show'
     get '/c/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_parent_category_category_show'
     get '/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_grandparent_category_category_show'

     Discourse.filters.each do |filter|
       get "/c/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_category_show_#{filter}"
       get "/c/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_parent_category_category_show_#{filter}"
       get "/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_grandparent_category_category_show_#{filter}"
     end
   end
end

Это сложнее, чем, вероятно, нужно вам, но такая реализация неустойчива, если вы не готовы инвестировать значительное время или ресурсы в её поддержку. Скорее всего, она перестанет работать при обновлении стандартного Discourse.

С учётом этого, важно понимать два момента относительно структуры маршрутов категорий и тегов в стандартном Discourse:

  1. Пересечения нескольких тегов возможны только на уровне всего сайта, а не на уровне категории. То есть в стандартном Discourse нет маршрутов для отображения списка тем, которые относятся к конкретной категории и одновременно имеют более одного определённого тега. Если вам это нужно, придётся добавлять собственный маршрут.

  2. Пересечения категорий невозможны. То есть в Discourse нет маршрута для отображения тем из двух категорий одного уровня (например, двух родительских или двух дочерних категорий).

Тем не менее, вы можете реализовать четырёхуровневую систему (что, судя по всему, является вашей целью), не внося существенных изменений на стороне сервера.

Например, вы можете использовать только теги для представления четырёх уровней. Ссылка https://thepavilion.io/tags/intersection/events/bug/to-do/high представляет пересечение тегов events, bug, to-do и high на сайте Pavilion. Вы можете использовать четыре выпадающих списка, по одному для каждой группы тегов, из которой берутся эти теги, например:

[тип] [статус] [важность] [категория]

Как только вы определите, как хотите структурировать свою иерархию в рамках существующей структуры маршрутов Discourse, остальные элементы из вашего списка будут просто изменениями на стороне клиента и будут (относительно) простыми в реализации.

  1. Иерархия категорий из 3 уровней

    есть ли пример? Я не представляю, как это будет выглядеть и куда добавляется код.
    Где и как вводится grandparent_category, раз нет стандартных инструментов для этого через интерфейс?
    Это как-то связано с Pavilion? Не связано, верно? Приведённый выше код изменит страницу категорий, не так ли?

  2. Пересечения множественных тегов звучат хорошо, хотя они

    это может потребовать отказаться от категорий как основного маршрута навигации и создать пользовательскую целевую страницу на основе этих тегов, о чём я спрашивал в Display tags by tag group - #22 by PackElend
    Для этого потребуется пользовательская тема, так?

  3. Только теги

    да, это идея того, с чего начать; всё остальное можно изменить на более позднем этапе.
    Пока мы обеспечиваем правильное тегирование, всё должно быть выполнимо, в зависимости от времени и уровня терпения к фрустрации :), верно?
    Иерархия будет следующей:

    1. уровень: локальные узлы
    2. уровень: континенты
    3. уровень: нации
    4. уровень: города

    В начале мы будем использовать только локальные узлы как категорию и подкатегорию на каждый город*. Как только узлов станет слишком много, мы перейдём на локальные узлы и нации, надеясь, что создадим свою тему, чтобы сделать навигацию на основе тегов более привлекательной (например, одинаковые блоки для тегов, как для категорий, как упоминалось в пункте 2).
    Кроме того, я надеюсь, что мы справимся с моим предстоящим запросом на новую функцию, обсуждаемым в плагине Locations, так как его можно будет использовать во многих группах категорий/тегов :angel:.

    Самое главное — как можно скорее запустить автоматическое тегирование тем, иначе у нас возникнет хаос ещё до начала масштабной работы.
    Кроме того, нам нужно добавить дополнительные выпадающие списки в панель навигации, которые будут заполняться тегами в зависимости от выбора. Надеюсь, не составит большого труда смешать подкатегории с выпадающими списками, определяемыми тегами.
    Легко ли реализовать что-то вроде макета ниже?

    1. макет с малым количеством узлов
      image
    2. макет с большим количеством узлов
      image
  4. Объединение блоков
    Напоследок, возможно, будет полезно: можно ли объединить блоки, как здесь:

image

Это не сработает, так как нарушает одно из ограничений, о которых я упоминал.

Вы не можете фильтровать по двум тегам внутри одной категории.

image

Не уверен, но мне кажется, вы предполагаете, что если вы находитесь в категории «локальные узлы» и фильтруете по «континентам», то сможете одновременно фильтровать и по странам, и по городам. Это тоже не сработает.

Думаю, это ваш лучший вариант.

использовать только локальные узлы как категорию и по одной подкатегории на каждый город

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

Как только узлов станет слишком много, мы перейдём на локальные узлы и страны

Я понимаю желание сразу создать правильную «структуру», но как бы хорош ни был ваш сервис, до возникновения такой проблемы ещё далеко — пройдут годы. К тому времени предположения, на которых строится ваша сообщество, уже изменятся.

Более того, проблема, с которой вы столкнётесь, будет в основном связана с организацией, а не с иерархией. Например, если захотите, вы можете просто сгруппировать подкатегории городов в изменённой панели навигации по странам. Если вам понадобится обсуждение на «национальном» уровне (хотя неясно, имеет ли это вообще смысл), вы можете просто создать отдельную подкатегорию для этого.

В вашем дискуссионном форуме не обязательно нужна иерархическая структура, строго соответствующая административной иерархии мест, вокруг которых идёт обсуждение. Вам нужна иерархия, которая позволит пользователям находить контент, актуальный для них. Я понимаю, что вы связываете эти два понятия, но не уверен, что это оправданно. Слишком большое внимание к этой связи лишь излишне усложняет ваше мышление о структуре форума.

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

Ты прав, это моя ошибка, вчера вечером я запутался в деталях.

[1] Неужели нельзя добавить дополнительные выпадающие списки?
Это как-то имитировало бы расширенный поиск.

Согласен. Я пытаюсь объединить старое, глубокое структурированное мышление с подходом Discourse.

Но всё же, как ты сказал,

Не уверен, будет ли существовать только

так как акцент сделан на проектах в очень узких, географически ограниченных зонах. Конечно, некоторые темы будут иметь национальное или глобальное значение. Как это модерировать, как всё поместить в правильный контекст и сделать доступным в нужном уголке Discourse — это, вероятно, область, где применим принцип «учиться на практике».

Если мы решим полагаться только на теги, твой подход пересечения тегов мог бы оказаться чрезвычайно полезным.
Прежде чем сделать этот шаг, нам нужно настроить посадочные страницы для тегов и пересечения, чтобы они выглядели примерно так же, как посадочная страница категорий. Это осуществимо?
Я представляю себе, что макет https://se23.life/tags будет использовать блоки, заполненные «подтегами», как подразумевается в Higher level of granularity for category & subcategory styling - #7 by PackElend (там я просил улучшить блоки для подкатегорий).
Кроме того, как только ты нажимаешь на блок или тег внутри блока, это запускает запрос https://thepavilion.io/tags/intersection/tag1/tag2/tag3/.... Результат отображается в том же стиле блоков (или в любом другом, который мы сочтем подходящим).

Как видишь, я всё ещё застрял на многоуровневом маршруте, так как это та же аналогия: когда ты приближаешься от глобального масштаба к локальному. Для любого нового пользователя это самый естественный путь навигации к его локальному узлу.
Я надеюсь, что ты окажешься прав, как сказано в

но могут возникнуть опасения, что какой-то уровень будет перегружен слишком большим количеством тегов. Например, размещение всех городов США или Китая в подкатегориях «США» и «Китай» соответственно может привести к беспорядку.

Согласен, хотя, возможно, я

:grin:. Это высказывание поможет лишить глубокого подхода излишней эмоциональности.

Можешь объяснить это подробнее или есть какой-то пример?
Является ли эта кастомизация панели навигации чем-то похожим на то, о чем спрашивал в самом начале этого поста, отмеченном как [1]?

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

  1. Посадочная страница — категории.

  2. Посадочная страница — категории, но локальные узлы вырастают как грибы.

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