Я подготовлю и выложу на GitHub компонент темы для добавления кнопки «Выйти» в верхнее меню, если кто-нибудь сможет подсказать, как обновить код @pfaffman здесь…
I got it! I won’t promise that it’ll work for you, but this might do it for you.
This is common/header.html
<script type="text/discourse-plugin" version="0.8">
const { iconNode } = require("discourse-common/lib/icon-library");
const { logout } = require("discourse/lib/logout");
api.decorateWidget("header-buttons:before", helper => {
if (!Discourse.User.current()) return;
currentUser = Discourse.User.current();
let container = api.container,
lo…
(В данный момент следование этим инструкциям и включение компонента приводит к тому, что всё верхнее меню исчезает )
Что-то вроде этого. Не стесняйтесь адаптировать под свои нужды.
import DButton from "discourse/components/d-button";
import routeAction from "discourse/helpers/route-action";
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("1.28.0", (api) => {
if (api.getCurrentUser()) {
api.headerIcons.add(
"logout",
<template>
<li class="logout">
<DButton
@action={{routeAction "logout"}}
class="btn-flat icon"
@icon="sign-out-alt"
@title="user.log_out"
@label="user.log_out"
/>
</li>
</template>,
{ before: "auth" }
);
}
});
.d-header-icons .logout {
margin-left: 1em;
button.icon {
width: auto;
padding-left: 0.5em;
padding-right: 0.5em;
svg {
margin-right: 0.2em;
width: 1em;
}
}
}
Окей, я его сверстал, но буду признателен за тестирование перед отправкой в Meta…
(В итоге я использовал Central Theme Header User Icons - #4 by carson Карсона в качестве отправной точки)
Adds a Log Out button to the header in Discourse (except in Mobile)
Я бы не рекомендовал использовать виджет: в конечном итоге он исчезнет в рамках модернизации ядра.
То же самое касается api.addToHeaderIcons: теперь он устарел в пользу api.headerIcons.add.
Вот несколько рекомендаций:
Я рекомендую использовать GitHub - discourse/discourse-theme-skeleton: Template for Discourse themes · GitHub в качестве справочника при создании компонента темы. В нём содержатся актуальные файлы конфигурации. Это полезно для линтинга/форматирования кода, а наличие стандартной структуры — хорошая практика.
При использовании синтаксиса <template> переименуйте файл в .gjs (Glimmer JS); в противном случае он может не работать.
В моём примере вы можете переместить шаблон в отдельный файл, например:
/javascripts/discourse/components/logout-header-button.gjs
import DButton from "discourse/components/d-button";
import routeAction from "discourse/helpers/route-action";
const LogoutHeaderButton = <template>
<li class="logout">
<DButton
@action={{routeAction "logout"}}
class="btn-flat icon"
@icon="sign-out-alt"
@title="user.log_out"
@label="user.log_out"
/>
</li>
</template>;
export default LogoutHeaderButton;
Затем в инициализаторе импортируйте компонент и используйте его как параметр в headerIcons:
import LogoutHeaderButton from "../components/logout-header-button";
export default apiInitializer("1.28.0", (api) => {
if (api.getCurrentUser()) {
api.headerIcons.add("logout", LogoutHeaderButton, { before: "auth" });
}
});
Расположение кнопки можно настроить. Вы можете ознакомиться с документацией:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.gjs#L1838-L1886
Дайте знать, если возникнут вопросы. Если понадобится пример, я всегда могу отправить pull request.
Просто восхитительно. Большое спасибо за то, что нашли время провести меня!