При добавлении дополнительного уровня вложенности на странице категорий отображаются все категории, включая дочерние

То, что вы ищете, определяется свойством isGrandParent в шаблоне здесь:

discourse/app/assets/javascripts/discourse/app/templates/components/parent-category-row.hbs at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Если у категории есть внучатые категории, мы рендерим соответствующую разметку для них. В противном случае рендерятся дочерние категории.

Самый простой способ обойти это — переопределить это свойство в компоненте Ember parent-category-row.

Это можно сделать с помощью метода плагина modifyClass.

Developing Discourse Themes & Theme Components

modifyClass позволяет переоткрыть класс компонента parent-category-row и добавить новые методы.

Чтобы эти методы сработали и данные были доступны, необходимо подключить их к хуку didReceiveAttrs.

Для этого можно использовать встроенный декоратор @on.

Когда всё готово, вы можете просто переопределить isGrandParent для всех категорий, рендеримых через шаблон этого компонента, и установить их значение в false.

Вот как это выглядит в сборе:

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  api.modifyClass("component:parent-category-row", {
    @on("didReceiveAttrs")
    removeGrandchildCategories() {
      this.category?.set("isGrandParent", false);
    }
  });
</script>

Добавьте этот код на вкладку header вашей темы в разделе common.

Это приведёт к тому, что шаблон будет рендерить только дочерние категории и игнорировать внучатые.

Вы можете использовать этот же подход для изменения любого свойства в любом компоненте.

2 лайка