Шёпотные ответы просачиваются в номер поста

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

Я думаю, что эта тема может проиллюстрировать проблему: Migrate a phpBB3 forum to Discourse - #580 by gerhard

Итак, последнее сообщение в теме (на момент написания) называется «сообщение №580», но полоса прокрутки показывает 256 / 257. Если посмотреть на второе сообщение в теме, оно имеет номер #303, поэтому, вероятно, перед ним есть какие-то «шепотки».

Также после этого сообщения есть разрыв в нумерации: Migrate a phpBB3 forum to Discourse - #307 by Canapin

Возможно, там снова «шепоток»?

Нет, это просто набор удалённых постов. Это не баг.

Хорошо, если дело обстоит именно так, проверьте тему с шепотом (или напишите шепотом здесь, а затем отправьте тестовый ответ?), потому что вы получите тот же эффект.

К сожалению, об этой ошибке уже знают критически настроенные или параноидальные участники моих форумов, которые каким-то образом воображают, что происходит что-то ужасное :frowning:

Как вы представляете себе работу этого?

  • Номера постов присваиваются при создании поста (получается следующий доступный номер) и не могут быть изменены задним числом, так как это нарушит ссылки на конкретный пост.
  • «Шепот» — это просто пост в теме с постоянным флагом «Только для сотрудников». Как и любой другой пост, он получает номер при создании. Вы бы присваивали номер по-другому?

Если дело в недоверии к сотрудникам, возможно, вашему сообществу нужно, чтобы вся модерация и прочее проводились прозрачно, на всеобщем обозрении?

Номер поста # должен совпадать с номером поста, вычисляемым в полосе прокрутки, и таким образом «пропускать» шёпоты для не-модераторов. Ссылки на посты-шёпоты всё ещё могут поддерживаться, но, возможно, с использованием немного другого формата URL, например /topicid/w-postid, где префикс «w» указывает, что postid является шёпотом.

Мы очень открыты, но это всё равно не мешает нескольким людям указывать, сколько шёпотов, по их мнению, есть в теме, и пытаться разжечь конфликт.

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

Если ваше сообщество не нравится, что шёпоты могут использоваться, отключение их через настройку enable whispers может помочь.

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

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

Оставив в стороне проблемы сообщества, я всё же считаю, что исправить наиболее очевидное несоответствие в подсчётах должно быть достаточно просто:

Знаменитые последние слова :rofl:

Если мы проигнорируем шёпот в постоянных ссылках на посты, как администраторы смогут ссылаться на шёпот? Тогда нам нужно будет добавить новый формат URL для шёпота, как вы предложили.

На что я уже ответил:

Таким образом, мы ходим по кругу.

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

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

Я считаю, что это сочетание необходимой прозрачности и незаметности для пользователей. (Да, это частичное противоречие.)

Мы не готовы идти на компромисс в вопросе порядка отображения постов (как это делают крупные платформы вроде Twitter в случае с удалёнными постами). Такие расхождения в нумерации кажутся неизбежной платой за это.

Не могли бы вы подробнее рассказать или дать ссылку на источник, объясняющий, что делает Twitter? Я не пользуюсь Twitter, поэтому у меня нет отправной точки для сравнения того, что делает Discourse в данном случае.

Вот краткая версия :blush: проверьте дату

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

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

Ах… эта штука с упорядочиванием вручную. Я не подумал о том, как это повлияет на записи удалённых постов и т.п.

Да — я полностью согласен с этим.

Вот почему я думаю, что было бы лучше, если бы два «номера постов», отображаемые на одном экране, совпадали (скриншот в моём посте выше), даже если номер поста в URL (который обычно требует прокрутки) всё равно выдаст фактический порядковый номер поста.

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

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

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

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

(Здесь я рассматриваю только изменение отображаемого номера, а не URL, поскольку изменение URL было бы ещё хуже, так как ссылки со временем указывали бы на неверные посты)

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

Ещё одна задача, которую нужно выполнять в фоновом режиме, — это обновление ссылок, на которые ссылаются в других темах.
Здесь также могут возникнуть проблемы: общие ссылки на другие сайты.
Если изменить URL-адреса, чтобы они соответствовали ползунку времени, они перестанут совпадать с теми, которые были ранее опубликованы.

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

Окно ссылки:

Полоса прокрутки:
image

В этой теме они совпадают (поскольку, вероятно, нет удалённых постов или приватных сообщений). Ура :slight_smile:

Я не могу протестировать эту тему, так как числа верны, но если текущее число в таймлайне корректно и может быть связано с постом, то это потребует лишь небольшого изменения во фронтенде. Так что да, это можно реализовать без штрафов (при условии, что меняется только номер поста, а не URL).

Да — именно так. Таймлайн делает это правильно, поэтому достаточно просто переиспользовать эти данные и логику для номера поста (но не в URL).