# Почему иконка не меняется везде?

**URL:** https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213
**Category:** Support
**Created:** [28.Июль.2019 18:58:17 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213 "2019-07-28T18:58:17Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![nexo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nexo/32/106384_2.png) [@nexo](https://meta.discourse.org/u/nexo)
#### Post date: [28.Июль.2019 18:58:17 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/1 "2019-07-28T18:58:17Z")

</div>

Я успешно использую этот скрипт для замены иконок на всём моём сайте, и он меняет иконку «решено» (галочку) плагина Solved на «палец вверх».

 ![image](https://global.discourse-cdn.com/meta/original/3X/d/0/d039dad276971e0e9ef71d26dff17674d537c130.png)  
Однако это изменение не применяется во всех случаях на сайте, например, в списке уведомлений:

![image](https://global.discourse-cdn.com/meta/original/3X/e/8/e88a53a565643f7e62719eba34bc48547953ff1e.png)  
~  
Вот как это выглядит в других местах сайта, где замена работает:

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

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [29.Июль.2019 01:22:11 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/2 "2019-07-29T01:22:11Z")

</div>

Некоторые иконки, включая все уведомления, требуют особого подхода, так как мы используем разные названия. В данном случае вам нужно найти `notification.solved.accepted_notification` (все имена таких исключительных иконок перечислены в разделе `replacements` по адресу [https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse-common/lib/icon-library.js.es6](https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse-common/lib/icon-library.js.es6))

```xml
<script type="text/discourse-plugin" version="0.8">
    api.replaceIcon('notification.solved.accepted_notification', 'thumbs-up')
</script>

```

---

<div class="post-metadata">

### Author: ![nexo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nexo/32/106384_2.png) [@nexo](https://meta.discourse.org/u/nexo)
#### Post date: [21.Август.2019 21:02:42 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/3 "2019-08-21T21:02:42Z")

</div>

Извините, что снова поднимаю эту тему, но не знаете ли вы, почему иконка не меняется в элементах управления публикацией?

 ![51%20PM](https://global.discourse-cdn.com/meta/original/3X/9/4/9464a607afa31689d9be6da5f2eac548231cbff0.png)  
**Вот код, который я использую:**

 ![52%20PM](https://global.discourse-cdn.com/meta/original/3X/b/c/bce0364acacfbc636a7f6fdde6f613e1a260bce3.png)

---

<div class="post-metadata">

### Author: ![tshenry](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tshenry/32/119495_2.png) [@tshenry](https://meta.discourse.org/u/tshenry)
#### Post date: [21.Август.2019 21:26:02 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/4 "2019-08-21T21:26:02Z")

</div>

Вы пытаетесь изменить его конкретно для этого расположения и состояния иконки? Если вы всё ещё пытаетесь изменить иконку глобально, то код, который вы изначально опубликовали, остаётся верным:

```js
api.replaceIcon('far-check-square', 'thumbs-up')
api.replaceIcon('check-square', 'thumbs-up')

```

Эта иконка галочки рядом с «Kudos» не является стандартной, поэтому возможно, у вас где-то есть конфликтующий код?

---

<div class="post-metadata">

### Author: ![nexo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nexo/32/106384_2.png) [@nexo](https://meta.discourse.org/u/nexo)
#### Post date: [21.Август.2019 21:29:01 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/5 "2019-08-21T21:29:01Z")

</div>

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

 ![48%20PM](https://global.discourse-cdn.com/meta/original/3X/2/0/20bb879451aff64147b8cddb4b9f3542b1b53fd4.png)

---

<div class="post-metadata">

### Author: ![tshenry](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tshenry/32/119495_2.png) [@tshenry](https://meta.discourse.org/u/tshenry)
#### Post date: [21.Август.2019 22:12:36 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/6 "2019-08-21T22:12:36Z")

</div>

Как уже упоминал Крис, только некоторые иконки требуют особого подхода. Уведомления — один из таких случаев, поэтому вам нужно было использовать `notification.solved.accepted_notification`. В случае с иконкой «решено» в элементах управления постом используется общее имя иконки, поэтому изменить её можно будет только глобально, используя метод `replaceIcon`.

Если вы хотите добиться максимальной точности, думаю, вам придётся переопределить функцию `addPostMenuButton`, определённую в плагине «Решено». Попробуйте следующее:

```js
<script type="text/discourse-plugin" version="0.8"> 
  const { iconNode } = require("discourse-common/lib/icon-library");
  api.addPostMenuButton("solved", attrs => {
    const currentUser = api.getCurrentUser();
    const canAccept = attrs.can_accept_answer;
    const canUnaccept = attrs.can_unaccept_answer;
    const accepted = attrs.accepted_answer;
    const isOp = currentUser && currentUser.id === attrs.topicCreatedById;
    const position =
      !accepted && canAccept && !isOp ? "second-last-hidden" : "first";

    if (canAccept) {
      return {
        action: "acceptAnswer",
        icon: "far-check-square",
        className: "unaccepted",
        title: "solved.accept_answer",
        label: "solved.solution",
        position
      };
    } else if (canUnaccept && accepted) {
      const title = canUnaccept
        ? "solved.unaccept_answer"
        : "solved.accepted_answer";
      return {
        action: "unacceptAnswer",
        icon: "thumbs-up", // ИЗМЕНЕНО ЗДЕСЬ
        title,
        className: "accepted fade-out",
        position,
        label: "solved.solution"
      };
    } else if (!canAccept && accepted) {
      return {
        className: "hidden",
        disabled: "true",
        position,
        beforeButton(h) {
          return h(
            "span.accepted-text",
            {
              title: I18n.t("solved.accepted_description")
            },
            [
              h("span", iconNode("thumbs-up")), // ИЗМЕНЕНО ЗДЕСЬ
              h("span.accepted-label", I18n.t("solved.solution"))
            ]
          );
        }
      };
    }
  });
</script>

```

---

<div class="post-metadata">

### Author: ![nexo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nexo/32/106384_2.png) [@nexo](https://meta.discourse.org/u/nexo)
#### Post date: [30.Август.2019 17:05:33 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/7 "2019-08-30T17:05:33Z")

</div>

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

 ![image](https://global.discourse-cdn.com/meta/original/3X/8/6/86dbe4cb2b438c60102294dc656b89229073a400.png)

---

<div class="post-metadata">

### Author: ![tshenry](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tshenry/32/119495_2.png) [@tshenry](https://meta.discourse.org/u/tshenry)
#### Post date: [30.Август.2019 17:20:59 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/8 "2019-08-30T17:20:59Z")

</div>

Странно! Не совсем понятно, почему это не работает только для обычных пользователей… В любом случае, я обновил скрипт, добавив недостающий фрагмент.

---

<div class="post-metadata">

### Author: ![nexo](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nexo/32/106384_2.png) [@nexo](https://meta.discourse.org/u/nexo)
#### Post date: [30.Август.2019 19:00:36 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/9 "2019-08-30T19:00:36Z")

</div>

Больше не сломано, однако изменение иконки отображается только для администраторов; для обычных пользователей всё ещё отображается иконка «решено/галочка»:

 ![image](https://global.discourse-cdn.com/meta/original/3X/6/0/60206f60d592c4a2fae2a9c8bf63815d6bcef370.png)  
**Администратор** :  
 ![image](https://global.discourse-cdn.com/meta/original/3X/b/5/b512574276bc033f3e404eb0bd1473f4b75696d6.png)

---

<div class="post-metadata">

### Author: ![tshenry](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tshenry/32/119495_2.png) [@tshenry](https://meta.discourse.org/u/tshenry)
#### Post date: [30.Август.2019 19:10:36 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/10 "2019-08-30T19:10:36Z")

</div>

Ага, скрипт обновлён.

---

<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: [29.Сентябрь.2019 20:36:47 UTC](https://meta.discourse.org/t/why-doesnt-the-icon-change-everywhere/124213/14 "2019-09-29T20:36:47Z")

</div>

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