# Можно ли передать параметры в API, создающее ссылки сообщества?

**URL:** https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857
**Category:** Development
**Created:** [04.Июнь.2025 13:59:01 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857 "2025-06-04T13:59:01Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [04.Июнь.2025 13:59:01 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/1 "2025-06-04T13:59:01Z")

</div>

Например,

```plaintext
       api.addCommunitySectionLink({
         name: "intersection-navigator",
         route:"tags.intersection",
         title: I18n.t("tag_intersection_navigator.link.title"),
         text: I18n.t("tag_intersection_navigator.link.text")
       })

```

… не сработает, так как этот маршрут требует параметра tag\_id.

Я пробовал добавить:

```plaintext
        params: { tag_id: siteSettings.discourse_tag_intersection_navigator_all_word },

```

```plaintext
        model: { tag_id: siteSettings.discourse_tag_intersection_navigator_all_word },

```

… но я сильно подозреваю, что API не обрабатывает это так, как необходимо…

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [04.Июнь.2025 14:55:31 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/2 "2025-06-04T14:55:31Z")

</div>

Ах, я добился прогресса!

Это связано с этим:

> <https://github.com/discourse/discourse/blob/60b3a216e99afe7df51ea5a3a20a30b962c05e33/app/assets/javascripts/discourse/tests/acceptance/sidebar-user-community-section-test.js#L1027>

---

<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: [04.Июнь.2025 15:11:49 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/3 "2025-06-04T15:11:49Z")

</div>

Конкретно, я думаю, это здесь: [discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js)

Если мы добавим это, должно сработать:

```js
get models() {
 return args.models;
}

```

> <https://github.com/discourse/discourse/pull/33070>
>
> Without this, you can't add a custom link like this...
> 
> \`\`\`js
> api.addCommunit…ySectionLink({
> name: "tag-link",
> route: "tag.show",
> title: "foo",
> text: "bar",
> models: \["baz"\]
> })
> \`\`\`
> 
> ...because the route needs a model

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [04.Июнь.2025 15:21:55 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/4 "2025-06-04T15:21:55Z")

</div>

О, спасибо, что открыли!

---

<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: [04.Июнь.2025 15:23:47 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/5 "2025-06-04T15:23:47Z")

</div>

Кстати, так как есть условие `typeof args === "function"`, вы можете сразу сделать вот так:

```js
api.addCommunitySectionLink((Base) =>
  class CustomLink extends Base {
    get name() {
      return "intersection-navigator";
    }

    get route() {
      return "tag.show";
    }

    get models() {
      return ["tagid"];
    }

    get title() {
      return I18n.t("tag_intersection_navigator.link.title");
    }

    get text() {
      return I18n.t("tag_intersection_navigator.link.text");
    }

  }
);

```

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [04.Июнь.2025 15:24:34 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/6 "2025-06-04T15:24:34Z")

</div>

Да, я уже это делаю… но позже в процессе возникает какая-то странность.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [04.Июнь.2025 15:27:04 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/7 "2025-06-04T15:27:04Z")

</div>

По какой-то причине это работает не совсем так, как нужно, и при клике возникает ошибка, связанная с отсутствием `postStream`:

```plaintext
api.addCommunitySectionLink((baseSectionLink) => {
        return class CustomSectionLink extends baseSectionLink {
          get name() {
            return "intersection-navigator";
          }

          get route() {
            return "tags.intersection";
          }

          get models() {
            return [{tag_id: siteSettings.discourse_tag_intersection_navigator_all_word}];
          }

          get title() {
            return I18n.t("tag_intersection_navigator.link.title")
          }

          get text() {
            return I18n.t("tag_intersection_navigator.link.text");
          }
        };
      });

```

Кажется, будто нужно включить модель для текущего маршрута, что странно!

---

<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: [04.Июнь.2025 15:36:58 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/8 "2025-06-04T15:36:58Z")

</div>

Какой результат дает эта настройка? Похоже, что при ручном выполнении всё работает нормально:

```js
get models() {
  return ["featured", "tv"];
}

```

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [04.Июнь.2025 15:40:37 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/9 "2025-06-04T15:40:37Z")

</div>

Да, это работает, это действительно полезно, спасибо!

Настройка — это просто строка. Я, кажется, слишком усложнил.

Хотя название “models” для параметров запроса не на 100% интуитивно понятно?

Твой PR сделает это намного аккуратнее, спасибо!

---

<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: [04.Июнь.2025 15:48:16 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/10 "2025-06-04T15:48:16Z")

</div>

> [@merefield](#):
>
> Имя «models» для параметров запроса не на 100% интуитивно понятно?

Да, сначала и мне это было не совсем ясно, но дело в том, что в итоге используется компонент LinkTo из Ember, который ожидает аргумент model…

---

<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: [04.Июль.2025 15:48:29 UTC](https://meta.discourse.org/t/is-it-possible-to-pass-params-to-the-api-that-creates-community-links/368857/11 "2025-07-04T15:48:29Z")

</div>

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