Как найти расположение шаблонов Discourse, чтобы задать их в коде?
Особенно меня интересует правильное имя usercard
Существует очень удобный компонент темы для отслеживания мест выхода плагинов в наших различных шаблонах Handlebars: (deprecated) Plugin outlet locations theme component. В конце первого сообщения есть ссылка на предварительный просмотр этого компонента на нашем сайте создателя тем. Вы можете использовать его, чтобы найти большинство выходов плагинов, даже не устанавливая его на свой собственный сайт.
Стоит учитывать, что шаблоны и виджеты — это две разные концепции. При этом, при необходимости, они могут работать вместе, если подключить виджет к выходу плагина в шаблоне. Однако на данный момент чаще используются коннекторы, компоненты или контроллеры для работы с выходами плагинов, как это делается в плагинах.
Этот раздел руководства разработчика охватывает многое из того, что вы ищете: This section. Также рекомендую ознакомиться с репозиториями GitHub компонентов тем в нашей категории Customization > Theme, чтобы увидеть хорошие примеры.
Спасибо за подсказку! Я нашел необходимую часть user-card-post-names:after.
Я попробовал использовать её в исходном коде, но у меня не получилось.
Я заменил poster-name:after на user-card-post-names:after, но это не сработало, и пользовательское поле не отображается на карточке пользователя. Есть какие-то идеи, почему так произошло?
Вы не сможете использовать decorateWidget() для плагинного выхода. Попробуйте что-то вроде этого:
<script type="text/discourse-plugin" version="0.8.42">
const h = require("virtual-dom").h;
api.createWidget("user-card-custom-field", {
html(attrs) {
const userCustomFields = attrs.user.custom_fields;
if (userCustomFields.user_field_4) {
return h('span.poster-user-field', userCustomFields.user_field_4);
}
}
});
</script>
<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
{{mount-widget widget="user-card-custom-field" args=(hash user=user)}}
</script>
mount-widget передаёт объект пользователя, доступный из плагинного выхода в ядре, и делает его доступным в атрибутах созданного нами виджета user-card-custom-field.
Убедитесь, что вы добавили user_field_4 в настройки сайта «Пользовательские поля для публичных пользователей» или «Пользовательские поля для сотрудников» в зависимости от необходимости.
Редактирование
Также, если вам не нужно делать что-то особенно специфичное, вы можете вообще отказаться от виджетов и просто использовать плагинный выход:
<script type="text/x-handlebars" data-template-name="/connectors/user-card-post-names/user-card-custom-field">
{{#if user.custom_fields.user_field_1}}
<span class="poster-user-field">{{user.custom_fields.user_field_1}}</span>
{{/if}}
</script>
Спасибо большое! Всё работает.

