Olhando um pouco mais para isso, um componente de breadcrumbs foi adicionado ao Discourse no início deste ano: FEATURE: Introduce DBreadcrumbs components (#27049) · discourse/discourse@1239178 · GitHub. Atualmente, ele é renderizado apenas em páginas administrativas selecionadas.
Então, eu criei um componente de teste para renderizar breadcrumbs: Manuel Kostka / Discourse / Components / Breadcrumbs · GitLab. O template atual é:
<template>
{{#if this.currentPage}}
{{bodyClass "has-breadcrumbs"}}
<ul class="breadcrumbs {{concat '--' settings.plugin_outlet}}">
<li class="breadcrumbs__item --home">
{{#if this.homePage}}
{{i18n "js.home"}}
{{else}}
<a href="/">{{i18n "js.home"}}</a>
{{/if}}
</li>
{{#if this.parentCategory}}
<li class="breadcrumbs__item --parent">
<a href="/c/{{this.parentCategoryLink}}">
{{this.parentCategoryName}}</a>
</li>
{{/if}}
{{#unless this.homePage}}
<li class="breadcrumbs__item --current">
{{this.currentPage}}
</li>
{{/unless}}
</ul>
{{/if}}
</template>
Eu criei um branch agora que usa o novo componente dbreadcrumbs: Files · dbreadcrumbs · Manuel Kostka / Discourse / Components / Breadcrumbs · GitLab. Isso tornaria o template mais conciso e, em geral, proporcionaria melhor consistência e acessibilidade:
<template>
{{#if this.currentPage}}
{{bodyClass "has-breadcrumbs"}}
<DBreadcrumbsContainer class="{{concat '--' settings.plugin_outlet}}" />
<DBreadcrumbsItem @path="/" @label={{i18n "js.home"}} />
{{#if this.parentCategory}}
<DBreadcrumbsItem
@path="/c/{{this.parentCategoryLink}}"
@label={{this.parentCategoryName}}
/>
{{/if}}
{{#unless this.homePage}}
<DBreadcrumbsItem @path="" @label={{this.currentPage}} />
{{/unless}}
{{/if}}
</template>
No entanto, usando DBreadcrumbsItem, a ordem da categoria pai e subcategoria se mistura no componente renderizado. A categoria atual é inserida primeiro:
Eu me pergunto se é por causa desse comportamento, declarado na mensagem de commit?
- DBreadcrumbsItem - O componente que registra um LinkTo
para a trilha do breadcrumb. A trilha do breadcrumb
será exibida com base na ordem em que esses itens são renderizados na página.
