Представляем вложенные ответы

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

То, что начиналось как экспериментальный плагин, превратилось в проект, который теперь внедряется непосредственно в Discourse. Вот пример того, как выглядит вложенная тема на данный момент:

Когда ссылка ведёт на конкретный пост (из ссылки для обмена или уведомления), мы показываем вид с одной веткой:

Включение функции на вашем сайте

Настройки сайта для включения этой функции доступны в интерфейсе администратора. Перейдите в раздел «Вложенные ответы», чтобы управлять функцией, режимами сортировки по умолчанию, максимальной глубиной и другими параметрами.

Дорожная карта

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

  • Улучшение мобильного опыта

  • Переосмысление временной шкалы темы для вложенного вида. В настоящее время в режиме вложенных ответов на темах нет временной шкалы

  • Добавление как минимум одного нового режима сортировки постов с учётом старения, аналогичного нашему режиму «Горячее» для списков тем.

Ограничения

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

Мы будем рады вашим отзывам

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

37 лайков

О да! Отличное время. Я сегодня вечером мигрирую форум на новый сервер с двумя контейнерами и не могу дождаться, когда переключусь на новую версию, когда через пару недель начнётся регулярный сезон и наши спортивные пулы. Это тоже станет хорошим тестовым случаем.
Будет здорово иметь возможность выбора между плоской и встроенной дискуссией — спасибо за это @markvanlan и команде.

Будет весело посмотреть, что сломается :laughing:

14 лайков

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

Я не могу найти опцию для включения этой функции, несмотря на обновление Discourse!

У меня самохостинг, возможно, в этом причина :sweat_smile:

Обновите свой экземпляр Discourse, затем перейдите ко всем настройкам сайта и найдите «nested».

Вы можете переключить это с помощью гаечного ключа администратора темы при создании новой темы.

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

Я размещаю у себя, и это работает безупречно.

10 лайков

Спасибо за твою эффективность :+1:

1 лайк

Можно ли массово изменить/обновить существующие темы через опции «Выбрать сообщения > Массовые действия»?

Или есть ли варианты в консоли Rails для массового обновления всех существующих тем?

2 лайка

Да, переключение — один из вариантов массовых действий :slight_smile:

3 лайка

Хм, не уверен, насколько будет работоспособна массовая переключательная функция для категорий с десятками тысяч тем. Возможно, стоит рассмотреть вариант с использованием фоновых задач Rails для массовой или пакетной конвертации? :thinking:

И обратима ли эта операция? Можно ли преобразованную в ветку тему обратно в плоскую?

3 лайка

Да, я согласен с вами. Это ограничение на данный момент, и мы обязательно будем это учитывать.

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

В целом я беспокоюсь, что администраторы включат эту функцию для исторических тем, и тогда обсуждение станет нечитаемым. Мы продолжим обдумывать этот вопрос. Самое простое изменение, которое я могу придумать: при переключении настройки категории будет появляться модальное окно с вопросом: «Хотите применить это к существующим темам?»

7 лайков

Удивительно! Так рад это видеть! :clap:

2 лайка

Мне всегда казалось, что метки «Ответить» могли бы быть более конкретными — поэтому некоторое время назад я использовал пользовательский CSS, чтобы добавить контекст:

скриншот

CSS
/* добавить текст к кнопке Ответить для исходного сообщения (также известного как Тема) */
#post_1 nav.post-controls {
  .actions {
    button.reply {
      span.d-button-label:after {
        // Добавляем этот текст после Ответить
        content: " к этой теме";
      }
    }
  }
}

/* добавить текст к кнопке Ответить для всех последующих сообщений (я называю их комментариями) */
nav.post-controls {
  .actions {
    button.reply {
      span.d-button-label:after {
        // Добавляем этот текст после Ответить
        content: " к этому комментарию";
      }
    }
  }
}

/* добавить текст к синей кнопке Ответить (к теме), появляющейся в конце страницы */
#topic-footer-buttons {
  .topic-footer-main-buttons {
    button.btn-primary.create {
      span.d-button-label:after {
        // Добавляем этот текст после Ответить
        content: " к основной теме";
      }
    }
  }
}
2 лайка

Проблема с этим решением заключается в том, что оно не будет переведено в интерфейсе для участников, у которых в настройках предпочтений указан язык, отличный от английского

2 лайка

Интересно…

Не означает ли это, что сначала следует протестировать эту функцию в наших сообществах изолированно, прежде чем всем нам решиться на конвертацию всех существующих тем? :thinking:

Это сработало бы, если бы функция поддерживала десятки тысяч тем.

Но при этом должно быть очень четко указано, что откат назад невозможен :sweat_smile:


Будет ли эта функция реализована сначала здесь, на meta, или на https://try.discourse.org, чтобы мы могли протестировать её вне наших производственных сред?

2 лайка

Если бы это было моё сообщество, я бы сначала протестировал в изоляции. С другой стороны, если вы включите это для всего своего сообщества, вы получите более ценную обратную связь быстрее :wink: . Шутки в сторону, я считаю, что тестирование в изоляции — разумный шаг, но здесь нет разрушительных миграций данных. Функцию можно безопасно включать и выключать. Ваше решение не закрепит вас ни в одном из направлений.

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

Не стесняйтесь попробовать её в этой категории:

3 лайка

Есть ли причина, по которой эту функцию могут включать только сотрудники, а не обычные пользователи? Когда я узнал, что она появится в Meta, я подумал, что её добавят в меню типов сообщений, но переключатель скрыт за иконкой гаечного ключа сотрудников.

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

2 лайка

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

9 лайков

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

Отличная функция! Однако :thinking: меня интересует больше сортировка «Лучшие / Новые / Старые», чем сама вложенная структура. Я уже реализовывал похожие элементы управления сортировкой в своём мобильном приложении (клиент для Discourse) и с радостью поддержал бы это нативно, вместо моего текущего метода, который, как я покажу ниже, тоже работает.

Изучив исходный код, я вижу, что запрос GET /n/{slug}/{topic_id}.json?sort={top|new|old}&page={n} возвращает тему во вложенном виде, отсортированную по выбранному режиму. Мой вопрос: есть ли интерес к тому, чтобы через существующую конечную точку /t/{slug}/{topic_id}.json (например, ?sort=top) экспонировать только сортировку, чтобы клиенты с плоским видом тоже могли этим воспользоваться?

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

Я понимаю, что именно структура данных вложенного вида (корневые сообщения + ленивые дочерние элементы) делает сортировку на стороне сервера выполнимой, а плоский вид использует другую логику пагинации. Если полноценная сортировка плоского вида нереалистична по соображениям производительности, даже опциональный параметр ?sort=top&limit=N был бы достаточен для реализации представления «Лучшее».

1 лайк

Шокированная радостная реакция Криса Пратта

1 лайк