Связанные темы (разделение и управление мега-темами)

Я только что объединил функцию, которая автоматически создаёт новую связанную тему, когда тема закрывается автоматически на основе настройки сайта «Количество постов для автоматического закрытия тем».

Эта функция особенно полезна для автоматического разделения и управления мега-темами.

Как это работает

Предположим, что настройка «Количество постов для автоматического закрытия тем» установлена на 10000 постов, и тема (с заголовком «Представьтесь!») только что достигла этого лимита.

Теперь мы закроем эту тему и создадим новую связанную тему для продолжения обсуждения. Первый пост новой темы будет содержать ссылки на все предыдущие обсуждения (темы).

К заголовку оригинальной темы будет добавлено «Часть 1», а к заголовку новой темы — «Часть 2».

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

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

Эта функция включена по умолчанию. Чтобы отключить её, просто отключите настройку сайта «Создавать связанную тему при автоматическом закрытии тем».

Обратите внимание, что эта функция будет отключена, если настройка «Количество постов для автоматического закрытия тем» отключена (установлена на 0).

33 лайка

Это здорово!

Можно ли использовать это как решение проблемы «babble 10 000 сообщений»?

4 лайка

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

previous_topics += "- [#{topic.title}](#{topic.url})\n"
parent_topic.add_moderator_post(system_user, I18n.t('create_linked_topic.moderator_post_raw', new_title: "[#{new_topic_title}](#{new_topic.url})"))

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

6 лайков

Да, это хорошая идея, @techAPJ, нам, наверное, стоит так сделать.

Кроме того, можем ли мы сделать так, чтобы было одно сообщение вместо двух? Почему бы не вписать часть «продолжить обсуждение» в сообщение о закрытии? Например:

Эта тема была автоматически закрыта после достижения максимального лимита в 10000 ответов. Продолжите обсуждение здесь: {link}

9 лайков

Реализовано в:

Конечно, реализовано в:

11 лайков

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

1 лайк

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

4 лайка

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

4 лайка

Хорошая мысль — тогда, скорее всего, всё в порядке!

3 лайка

Привет, очень крутая функция, но есть две проблемы:

  1. Как изменить текст «Часть» (1, 2 и так далее)? На англоязычных форумах, наверное, всё в порядке, но нам хотелось бы иметь возможность это изменить.
  2. Категория новой темы. У нас только что появилась первая автоматически связанная тема, и она оказалась в категории «без категории». Мы хотим, чтобы новая тема наследовала категорию предыдущей темы, которая была автоматически закрыта.
4 лайка

Да, это верные замечания, но в последний раз, когда я проверял, категория наследовалась корректно. Так ли это, @techAPJ?

3 лайка

Вам нужно обновить перевод для этих ключей. См.: Contributing translations to Discourse

Это действительно ошибка. Я исправлю это сегодня в приоритетном порядке.

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

6 лайков

Исправлено здесь:

9 лайков

Я также очень заинтересован в этом вопросе.

1 лайк

@elijah ты хотел продолжить свой разговор здесь? На мой взгляд, это более подходящее место для этого.

3 лайка

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

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

4 лайка

Да, позвольте мне повторить мои предложения здесь для контекста.

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

Метод «Копирование списка наблюдения»: при разделении темы копировать статусы «отключено / отслеживание / наблюдение» на новую тему. (А если в последней теме статус был только скопирован, а не установлен изначально: снять статус отслеживания для теперь закрытой темы.) Обоснование: если пользователь давно не заходил читать тему, но в целом заинтересован в ней, помочь ему догнать, не подсвечивая непрочитанные сообщения в старой теме, а только в новой.

Метод «Разделение сверху»: при разделении темы упростить перемещение сообщений со 2-го по N-е после первого сообщения в новую тему (созданную закрытой) и заменить эти перемещённые сообщения ссылкой на тему. Обоснование: возня с настройками наблюдения — это запутанно. Это позволяет архивировать старый контент, не нарушая внешние ссылки (закладки, RSS, встроенные в приложение и т. д.) или внутренние настройки наблюдения.

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

3 лайка

Я использую WP и Discourse для аудиообразования и группового обсуждения, и думал, насколько это было бы полезно: если плагин WP создаёт новую тему в Discourse, событие могло бы запускать создание связанной темы как темы для обсуждения по этой основной теме. Так я мог бы оставить оригинальную тему в режиме «только для чтения», чтобы люди не видели обсуждений, пока не прослушают аудио, а связанная тема стала бы местом для размышлений.

Похоже на это:

Правильно ли я понимаю, что для реализации этого в новом плагине достаточно немного доработать код здесь?

      if SiteSetting.auto_close_topics_create_linked_topic?
        # поставить в очередь задачу для создания связанной темы
        Jobs.enqueue_in(5.seconds, :create_linked_topic, post_id: @post.id)
      end

Также мне интересно, достаточно ли существует сценариев использования для автоматического создания связанной темы, чтобы это имело смысл как часть Discourse Automation?

1 лайк