# Добавить кнопку выхода в верхнее меню

**URL:** https://meta.discourse.org/t/add-logout-button-to-top-menu/143250
**Category:** Development
**Created:** [03.Март.2020 20:17:48 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250 "2020-03-03T20:17:48Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [03.Март.2020 20:17:48 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/1 "2020-03-03T20:17:48Z")

</div>

У меня есть клиент с сообществом, члены которого часто используют компьютеры общего доступа; в ходе тестирования они обнаружили, что многим пользователям сложно найти ссылку «Выйти» в выпадающем меню (гамбургер-меню). К сожалению, я не думаю, что существует хороший способ научить их всех нажимать ZZ.

Поэтому я пытаюсь добавить кнопку Выйти в верхнее меню.

Кажется, я мог бы использовать [(Superseded) Add a "+ New Topic" button on every page](https://meta.discourse.org/t/adding-new-topic-button-on-every-page/38922), чтобы вместо создания новой темы выполнять выход из системы, и что будет «легко» изменить этот `createTopic` на `logout`, после чего задача будет решена.

[https://github.com/discourse/discourse-new-topic-button-theme-component/blob/master/common/header.html#L39](https://github.com/discourse/discourse-new-topic-button-theme-component/blob/master/common/header.html#L39)

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

---

<div class="post-metadata">

### Author: ![anon48433008](https://avatars.discourse-cdn.com/v4/letter/a/22d042/32.png) [@anon48433008](https://meta.discourse.org/u/anon48433008)
#### Post date: [03.Март.2020 20:26:25 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/2 "2020-03-03T20:26:25Z")

</div>

Я с удовольствием воспользуюсь тем, что вы предложите.

Можете ли вы воспроизвести функцию API кнопки «Домой»?

![image](https://global.discourse-cdn.com/meta/original/3X/1/d/1df3d97d1cf5400b0870125e6de49bf783d4a8f4.png)

```
<script type="text/discourse-plugin" version="0.4">
  api.changeWidgetSetting('home-logo', 'href', 'xxx')
</script>

```

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [03.Март.2020 20:29:30 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/3 "2020-03-03T20:29:30Z")

</div>

Кнопку «OK» я нашёл, а вот API для выхода найти не могу.

---

<div class="post-metadata">

### Author: ![anon48433008](https://avatars.discourse-cdn.com/v4/letter/a/22d042/32.png) [@anon48433008](https://meta.discourse.org/u/anon48433008)
#### Post date: [03.Март.2020 20:40:02 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/4 "2020-03-03T20:40:02Z")

</div>

Извините, мне нравится этот план, и я надеялся, что смогу помочь. Что означает $0 и является ли он частью document.querySelector? Это может помочь?

 ![image](https://global.discourse-cdn.com/meta/original/3X/4/0/40ddf13a359bdce4c1898cfaa1e92fe449330017.png)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [03.Март.2020 21:53:54 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/5 "2020-03-03T21:53:54Z")

</div>

Я понял! Я не обещаю, что это сработает у вас, но это может помочь.

Это `common/header.html`

```javascript
<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,
        logout_text = 'Выйти', // текст кнопки!
        logout_title = 'Выйти',
        logout_icon = 'sign-out-alt',
        logout_button_class = "btn btn-default btn btn-icon-text",
        logout_button_helper = "button#logout",
        logout_label_helper = "span.d-button-label",
        composerModal = require("discourse/models/composer").default,
        composerController = container.lookup("controller:composer");

        const myLogout = function () {
            if (currentUser) {
                currentUser.destroySession();
            }
        };
 

        let currentUser = Discourse.User.current();
        let currentUsername = Discourse.User.current().username;
        return helper.h("span.header-links", [

        helper.h(
            logout_button_helper,
            {
              className: logout_button_class,
              title: logout_title,
              onclick: myLogout
            },
            [iconNode(logout_icon), helper.h(logout_label_helper, logout_text)]
          )        
      ])
    });
    </script>

```

---

<div class="post-metadata">

### Author: ![anon48433008](https://avatars.discourse-cdn.com/v4/letter/a/22d042/32.png) [@anon48433008](https://meta.discourse.org/u/anon48433008)
#### Post date: [03.Март.2020 22:24:10 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/6 "2020-03-03T22:24:10Z")

</div>

> [@pfaffman](#):
>
> не обещаю, что это сработает у вас

Чёрт возьми, Джей,

я вставил этот скрипт и получил

> **Сводка**
>
> работающую кнопку!  
> ![image](https://global.discourse-cdn.com/meta/original/3X/f/2/f2886cb6ff44b1e252cc7a549da7157aedeb7270.png)
> 
> ![image](https://global.discourse-cdn.com/meta/original/3X/c/3/c3360af4e7e868ccf53c1c7d83109200c7848f8f.png)
> 
> Мне нужно немного подправить внешний вид, но она работает, отличная работа!
> 
> Спасибо, что поделился 🕶

---

<div class="post-metadata">

### Author: ![Yana\_Nepyivoda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yana_nepyivoda/32/172581_2.png) [@Yana\_Nepyivoda](https://meta.discourse.org/u/Yana_Nepyivoda)
#### Post date: [16.Март.2020 11:04:22 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/8 "2020-03-16T11:04:22Z")

</div>

Привет, Джей,  
твой код работает как по маслу!  
У меня есть пользовательское меню под стандартной шапкой. Как я могу переместить эту кнопку туда? [Screenshot by Lightshot](https://prnt.sc/rh3yuo)  
Чтобы создать свою навигацию, я добавил HTML в раздел common → header

заранее спасибо

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [15.Апрель.2020 11:04:27 UTC](https://meta.discourse.org/t/add-logout-button-to-top-menu/143250/9 "2020-04-15T11:04:27Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
