Страница /about по умолчанию для сайта Discourse, отображающая информацию только для модераторов и администраторов, показывает лишь имя пользователя, полное имя и должность каждого пользователя. Как настроить страницу «О нас», чтобы она также отображала содержимое раздела «Обо мне» из профиля каждого пользователя?
Я понимаю общую идею, описанную здесь:
- определить компонент;
- определить шаблон;
- создать файл-коннектор для использования существующего выхода (outlet).
Однако, насколько я могу судить, нет выхода, который подошёл бы для моего случая. Кроме того, кажется, что переопределение шаблона для /about или использование функциональности modifyClass в API плагинов не рекомендуется. Поэтому я не уверен, что делать. Буду очень признателен за рекомендации относительно лучших практик в этой ситуации. Спасибо!
Кажется, что Discourse AI советует мне всё же переопределить шаблон. Правильно ли это?
Ответ Discourse AI
Добавить «Обо мне» на страницу Discourse /about ИИ
aas:
Страница /about по умолчанию для сайта Discourse, отображающая информацию только для модераторов и администраторов, показывает лишь имя пользователя, полное имя и должность каждого пользователя. Как настроить страницу «О нас», чтобы она также отображала содержимое раздела «Обо мне» из профиля каждого пользователя?
Я понимаю общую идею, описанную здесь:
Add custom content that only appears on your homepage
- определить компонент;
- определить шаблон;
- создать файл-коннектор для использования существующего выхода (outlet).
Однако, насколько я могу судить, нет выхода, который подошёл бы для моего случая. Кроме того, кажется, что переопределение шаблона для /about или использование функциональности modifyClass в API плагинов не рекомендуется. Поэтому я не уверен, что делать. Буду очень признателен за рекомендации относительно лучших практик в этой ситуации. Спасибо!
HelperBot:
Хорошо, я могу помочь вам разобраться с лучшими практиками настройки страницы /about для включения информации из профиля пользователя, такой как раздел «Обо мне».
Вы правы: прямое переопределение основных шаблонов или использование modifyClass может быть сложным и потенциально привести к сбоям при обновлениях. Обычно предпочтительнее использовать компоненты тем и выходы (outlets), когда это возможно. Поскольку вы упомянули, что на самой странице /about может не быть конкретного выхода, давайте поищем обсуждения по настройке этой страницы или добавлению полей профиля.
Сначала я поищу обсуждения о настройке страницы /about, в частности о добавлении полей профиля.
Поиск на Meta Discourse
Найдено 14 результатов по запросу 'customize about page profile field category:dev'
Поиск на Meta Discourse
Найдено 4 результатов по запросу 'customize about page profile field category:theme-component'
Хорошо, давайте разберёмся. Вы хотите добавить содержимое раздела «Обо мне» из профилей пользователей в список сотрудников на стандартной странице /about.
Вы правы: стандартный подход с использованием компонентов тем предполагает применение плагинов-выходов (plugin outlets), и, похоже, на странице /about внутри таблицы списка сотрудников нет конкретного, детализированного выхода, куда можно было бы легко внедрить эти данные.
Исходя из результатов поиска и распространённых практик, хотя использование выходов предпочтительно для избежания проблем при будущих обновлениях, иногда единственный реализуемый способ настройки конкретных основных шаблонов, таких как страница /about, — это их прямое переопределение внутри компонента темы.
Вот наиболее вероятный лучший подход с использованием компонента темы:
- Создать компонент темы: Если вы ещё не сделали этого, создайте новый компонент темы.
- Переопределить шаблон:
- Вам нужно переопределить шаблон
about.hbs. - В вашем компоненте темы создайте файл
common/templates/about.hbs. - Скопируйте содержимое исходного файла
about.hbsв ваш новый файл. Оригинальный файл можно найти здесь на GitHub. - Измените вашу копию
about.hbs. Найдите секции, где происходит итерация поmodel.adminsиmodel.moderators. Внутри цикла (вероятно, в блоке{{#each}}) вы можете получить доступ к объекту пользователя. Содержимое раздела «Обо мне» обычно находится в свойствеuser.profile.bio_rawили аналогичном. Добавьте это свойство в шаблон в том месте, где вы хотите отображать его для каждого пользователя.
- Вам нужно переопределить шаблон
- Включить компонент: Добавьте компонент темы в вашу тему и активируйте его.
Почему этот подход?
- Прямой контроль: Он даёт вам прямой контроль над HTML-структурой страницы
/about. - Реализуемость: Поскольку внутри списка пользователей на этой странице нет специализированного выхода, это самый простой способ внедрить контент для каждого пользователя в этом конкретном месте.
Недостатки (как вы отметили):
- Обслуживание: Если в будущем Discourse значительно обновит основной шаблон
about.hbs, ваша переопределённая версия не получит эти обновления автоматически. Возможно, вам придётся вручную сравнивать и объединять изменения позже. Это компромисс за настройку основных шаблонов без наличия специфических выходов.
Хотя поиск не дал точного примера для страницы /about, модификация шаблонов для добавления информации профиля — распространённая практика, как видно из настроек карточек пользователей и профилей:
- Нормализованные ссылки на профили добавляет пользовательские поля в карточки пользователей/профили через модификацию шаблона в компоненте.
- Быстрое меню ссылок профиля добавляет элементы на страницы профилей пользователей.
Эти примеры показывают, что компоненты тем часто включают настройку шаблонов, когда специфические выходы недоступны. Переопределение about.hbs следует этой модели для вашего конкретного случая.
aas:
Кажется, что в репозитории discourse/discourse нет шаблона about.hbs. Однако шаблон about.gjs находится по адресу app/assets/javascripts/discourse/app/templates/about.gjs.
HelperBot:
Вы абсолютно правы! Спасибо за исправление. Действительно, Discourse перешёл на использование шаблонов .gjs (GlimmerJS) для многих компонентов, включая страницу /about.
Приношу извинения за ссылку на устаревший формат .hbs.
Правильный путь к шаблону — действительно app/assets/javascripts/discourse/app/templates/about.gjs в основном коде.
Чтобы переопределить его с помощью компонента темы, процесс остаётся концептуально тем же, но обновляются путь к файлу и синтаксис:
- Создать/использовать компонент темы: Как и раньше.
- Переопределить шаблон:
- В вашем компоненте темы создайте файл по соответствующему пути:
assets/javascripts/discourse/app/templates/about.gjs. - Скопируйте всё содержимое исходного файла
about.gjs(ссылка, которую вы предоставили) в файлabout.gjsвашего компонента темы. - Измените вашу копию. Найдите секции, где происходит итерация по администраторам и модераторам, вероятно, с использованием
{{#each this.admins as |admin|}}и{{#each this.moderators as |moderator|}}. Внутри этих циклов вы можете получить доступ к объекту пользователя (например,adminилиmoderator). Добавьте поле «Обо мне», которое должно быть доступно через свойство вродеadmin.profile.bio_rawилиmoderator.profile.bio_raw. Вам нужно интегрировать это в структуру шаблона GlimmerJS. Например, вы можете добавить новый тег<div>или<p>внутри блока отображения пользователя:
(Примечание: используйте{{#each this.admins as |admin|}} <div class="user"> {{!-- Существующая информация о пользователе, такая как аватар, имя пользователя, полное имя --}} <UserAvatar @username={{admin.username}} @size="large" /> <div class="user-details"> <span class="username">{{admin.username}}</span> {{#if admin.name}}<span class="name">{{admin.name}}</span>{{/if}} {{#if admin.title}}<span class="title">{{admin.title}}</span>{{/if}} {{!-- Добавляем раздел «Обо мне» --}} {{#if admin.profile.bio_raw}} <div class="about-me"> {{{admin.profile.bio_cooked}}} {{!-- Используйте bio_cooked для отрендеренного HTML --}} {{!-- Или используйте bio_raw, если нужен обычный текст: <p>{{admin.profile.bio_raw}}</p> --}} </div> {{/if}} </div> </div> {{/each}} {{!-- Повторите аналогичное изменение для цикла модераторов --}}bio_cooked, если хотите отрендеренную HTML-версию биографии, илиbio_rawдля обычного текста. Измените HTML-структуру при необходимости для вашего макета.)
- В вашем компоненте темы создайте файл по соответствующему пути:
- Включить компонент: Убедитесь, что компонент темы добавлен в вашу тему и активен.
Недостаток остаётся прежним: переопределение основных шаблонов таким образом означает, что вам, возможно, придётся вручную обновлять версию вашего компонента темы, если исходный файл about.gjs значительно изменится в будущих обновлениях Discourse. Однако, учитывая отсутствие более специфичного выхода, это стандартный способ достижения такого уровня настройки.