Создать подтемы?

Я хочу сделать некоторые темы подтемами других.

Допустим, у меня есть «Тема А». На странице темы А я добавлю кнопку «создать подтему». Это позволит пользователю создать новую тему — «Тема Б». Тема Б будет дочерней по отношению к теме А.

С точки зрения пользовательского опыта это означает следующее:

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

Как лучше всего это реализовать? (Я предполагаю, что придётся использовать плагин, что меня вполне устраивает.)

Обратите внимание: меня интересует только один уровень вложенности подтем, а не несколько уровней (several).

Ниже приведены некоторые варианты, которые, по моему мнению, могут подойти:

Категории (хотя, вероятно, это не лучший вариант)

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

Или

Теги

На данный момент лучшее решение, которое я вижу, — использование тегов. То есть при нажатии кнопки «создать подтему» на странице темы А открывается новая тема, и я программно добавляю скрытый тег, например «Topic-A», который связывает её с темой А. Затем при нажатии кнопки «просмотреть все подтемы» темы А выполняется поиск по тегу «Topic-A».

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

Или

Пользовательские поля для тем

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

Например, мне придётся обновлять пользовательское поле основной темы только после создания подтемы; кроме того, мне нужно будет реализовать новый тип поиска — поиск всех тем, входящих в массив пользовательского поля основной темы, — вместо использования уже готовой функциональности поиска по тегам.

Есть ли ещё какие-то решения, которые я упустил?

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

С помощью плагина Custom Wizard вы можете выполнять несколько действий в рамках одной процедуры. В таком случае вы можете попросить пользователя указать свою подтему с помощью мастера, который:

  • Создаст новую тему для подтемы.
  • Создаст ответ в основной теме с ссылкой на подтему.

С помощью небольшого кастомного CSS для всех основных постов (вы можете добавить CSS-класс, чтобы выбирать их по категории или тегу), вы можете изменить внешний вид ответов так, как задумали. Также, возможно, с помощью мастера удастся добавить параметр к ответам, который позволит вам выбирать только автоматические ответы.

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

Я об этом не думал. Спасибо. Ключевой элемент, которого мне не хватает, — это что-то в подтеме, что связывает её с основной темой. Например, тег («Тема-А»), связанный с подтемой.

Вы предполагаете, что мастер при отправке будет выполнять API-запрос для создания тега и связывания его с подтемой? (Я не очень хорошо знаком с плагином мастера.)

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

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

Примеры того, как я мог бы это использовать:

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

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

Единственный способ, который я мог придумать для этого — использование пользовательских полей темы. Например, подтема может иметь пользовательское поле, ссылающееся на основную тему. Затем можно выполнить поиск всех тем, у которых значение этого пользовательского поля соответствует основной теме. У меня пока нет полностью реализованного плагина, но я смог добиться базовой работы в процессе разработки, используя код, о котором я упоминал здесь: Retrieve Topics based on custom field? - #12 by JQ331

Ах да, я представляю, что если создать пользовательское поле темы «topic-parent» или что-то в этом роде, то можно будет найти множество способов его использования. Я более внимательно изучу ссылку, которую вы поделили, и, надеюсь, в процессе немного выучу Ruby. Спасибо!