Discourse: отображение полного имени в упоминаниях

Установить этот компонент темы

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

Этот компонент темы загружает полное имя пользователя и отображает @fullname вместо @username в упоминаниях.

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

Также добавляется класс .mention-fullname к элементу якоря a.mention, если вы хотите стилизовать упоминания полных имен особым образом.

Отображение карточки при клике на упоминания @fullname остается полностью функциональным.

Сценарий использования:

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

Не очень дружелюбно, верно? К сожалению, это очень реальная ситуация, а не выдуманная. Экземпляр Discourse связан с SSO, и все имена пользователей следуют корпоративной политике.

В этом случае гораздо лучше читать @John Doe вместо @X9999999.

Настройки:

  • show_fullname_in_mentions: Если включено, @упоминания будут показывать @fullname вместо @username
18 лайков

Привет, Sérgio, спасибо за компонент темы!

Я попробовал его, но после экспериментов заметил, что он создаёт некоторые несоответствия с точки зрения UX.

Вот что происходит: у меня есть пользователь с именем пользователя “oli44” и полным именем “Henri Oliver”. С вашим компонентом темы теперь отображается “Henri Oliver”, что отлично, так как добавляет лучший контекст. Но представьте, что я другой пользователь, который не знает, что “Henri Oliver” использует имя пользователя “oli44”. Как тогда мне упомянуть его в своём посте?

Я буду искать “Henri Oliver” и действительно увижу “oli44”, но как мне понять, что это тот самый человек?

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

Или, может быть, есть способ, чтобы ваш компонент темы всё же показывал имя пользователя (например, @Henri Oliver (oli44)), чтобы, когда мне нужно упомянуть этого человека, я знал, что искать?

В любом случае спасибо за это отличное дополнение.

3 лайка

Просто введите @, а затем Henri Oliver. После подтверждения в ваш пост будет вставлено @+username.

При поиске отображаются как имя пользователя, так и полное имя.
В чём проблема?

Вы можете легко настроить отображение в форке:

https://github.com/thoka/discourse-show-name-mentions/commit/003b64369c196f71fb76d4e6d8f81f46f4cc2672

1 лайк

Я вижу две проблемы:

Для каждого упоминания будет отправляться один AJAX-запрос на сервер.
Может ли это привести к ограничению частоты запросов (throttling) на страницах с большим количеством имён пользователей (например, в предоставленных пользователями справочниках)?

Кэшированное преобразование имени пользователя в полное имя не будет учитывать изменения полного имени. Как долго живёт этот кэш?

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

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

Соответственно, AJAX-запрос был удалён из компонента.

Я также добавил опцию для настройки шаблона, используемого для рендеринга упоминаний:

2 лайка

Были ли AJAX-запросы обязательными, если мы хотели придерживаться компонента темы?

Если это так, я приглашаю вас создать новую тему в разделе #plugin, если вы считаете свою работу достаточно надежной для использования другими :slight_smile:

Мне не разрешено писать в этой категории …

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

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

1 лайк

Вам нужно запросить доступ на странице группы :slight_smile:

https://meta.discourse.org/g/plugin_authors

1 лайк

Вы только что опубликовали это, и я как раз установил плагин оригинального автора в тот момент, когда вы это сделали. Дело в том, что я заметил: плагин оригинального автора не поддерживает полные названия для групп. Однако, похоже, вы добавили группы. Если это так, поздравляю! Ваш плагин заслуживает отдельной темы, учитывая то, что вы реализовали!

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

Вы пересоздали свои посты?

1 лайк

Спасибо! Теперь я понял. Возможно ли также поиск по группам? У меня группа с trust_level_0 называется everyone. Если бы плагин мог использовать полное название группы для упоминаний, это было бы отличным способом сделать глобальные упоминания trust_level_0 похожими на упоминание everyone.

Теперь это работает (вам также нужно обновить компонент).

К сожалению, ссылка на название группы не откроет группу при клике.

1 лайк

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

Мне нужно обновить несколько вещей в этом компоненте темы. Теперь, если включен статус пользователя, можно убрать вызовы Ajax.

Постараюсь сделать это скоро.

2 лайка

Точно. Нужно отслеживать изменения имен пользователей и групп:

2 лайка

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

Имейте это в виду.

1 лайк

Спасибо. В нашем более формальном школьном сообществе имена будут меняться нечасто.

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

Это работает в основном. Не понимаю почему, но хотя я переименовал уровень доверия 0 в «все», метрика к нему не применяется.


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

РЕДАКТИРОВАНИЕ: Ах, потому что столбец full_name в таблице groups не содержит изменённого значения полного названия для групп уровней доверия! Проверил в Data Explorer — там значение null. Странно?

Судя по картинке выше, вы изменили i18n-записи для trust_level_0.

Попробуйте в консоли Rails выполнить: Group.find(10).update! full_name: "TESTTEST".

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

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