Links de Breadcrumb

Muito obrigado @manuel – Atualizei este componente com seu código (e adicionei mais alguns trechos de código) para habilitar algumas funcionalidades adicionais:

  1. Subcategorias agora são suportadas no Breadcrumb
  2. O Breadcrumb completo agora aparece em todas as páginas de Lista de Categorias e Subcategorias, além das páginas de Tópico
  3. Agora existe uma configuração para habilitar ou desabilitar no celular
2 curtidas

Olá! Este componente é ótimo!

Há apenas um detalhe que talvez você saiba como corrigir.

O botão “voltar” desaparece quando você rola para baixo (por favor, veja o vídeo anexo)… é possível ter o botão “voltar” fixo/flutuante no topo da tela para que ele permaneça visível mesmo ao rolar?

Contexto: a comunidade está incorporada (webview) em nosso aplicativo móvel.

2 curtidas

Obrigado @cristo por essa ótima sugestão que agora está incluída como uma configuração:

3 curtidas

Obrigado @denvergeeks! O botão agora está fixo.

Mas, como você pode ver no vídeo anexo, o botão não está me levando de volta ao mesmo ponto na rolagem na tela inicial.

1 curtida

Sim, porque é um botão Home, não um botão Voltar!

1 curtida

Minha falha! Pensei que fosse um botão de voltar por causa da seta.

@denvergeeks obrigado por esclarecer! Você conhece algum componente que ofereça um botão de voltar?

1 curtida

Não, não estou ciente de nenhum TC existente que tenha (ou inclua) um botão Voltar adequado. Pode muito bem haver algo existente que inclua um.

Mas reconheço a utilidade de ter um botão Voltar na navegação do site, então criarei um TC separado que o forneça.

Talvez você possa verificar se há algum tema ou componente de tema existente que, por acaso, o inclua. Encontrar isso pode acelerar meu processo.

2 curtidas

Incrível! Vou pesquisar e te contar minhas descobertas.

Obrigado!

2 curtidas

@denvergeeks Encontrei um tópico que pode ser útil:

Ainda não encontrei nenhum tema ou componente existente que inclua um botão de voltar.

2 curtidas

Infelizmente, estou tendo o mesmo problema em um iPhone 16 Pro Max.

2 curtidas

Sim, posso confirmar que apareceu após uma atualização. Estou tendo esse problema no meu celular Android.

2 curtidas

Obrigado @Aaron_Walsh e @cristo por reportarem! Por favor, atualizem agora e me informem seus resultados!

4 curtidas

Posso confirmar o problema no lado do Android. Ele foi corrigido e removido.

2 curtidas

Corrigido no meu iPhone!

2 curtidas

@denvergeeks Incrível! O botão voltar está funcionando no Android.

Muito obrigado!

2 curtidas

Notei que não há como decidir onde as migalhas de pão vão, o que seria ótimo. Por exemplo, estou usando os Banners de Categoria e gostaria que as migalhas de pão ficassem acima deles.

Fica um pouco perdido quando está abaixo.
Há alguma chance de mudar isso?
Obrigado


Acabei de notar algo que poderia ser corrigido (ou pelo menos ter a opção de ativar e desativar). Não acho que a última / precise estar lá

image

Então seria apenas Home / General Discussion em vez de Home / General Discussion /

EDITAR:
Acabei de usar CSS para fazer isso, mas acredito que poderia ser o padrão. Caso alguém queira isso:

/* Remove o separador (conteúdo ::after) do último item de breadcrumb */
.breadcrumbs li:last-child::after {
    content: none;
}

Esta é uma pequena alteração, mas para mim parece melhor. Aumente a margem inferior para 1rem para dar mais espaço para “respirar”, mas também o centraliza quando há um banner (se tivermos que manter essa posição na página). Veja minha imagem anterior (o padrão 0,5rem) versus usando 1rem:

image


Resultado final após todos os ajustes de CSS que fiz:

image

CSS:

/* breadcrumbs - remove background e aumenta margin-bottom */
.breadcrumbs {
    background-color: transparent !important;
    margin-bottom: 1rem;
}

/* breadcrumbs - oculta a seta para trás do link Home */
.breadcrumbs__title .d-icon {
    display: none;
}

/* breadcrumbs - remove o separador (conteúdo ::after) do último item de breadcrumb */
.breadcrumbs li:last-child::after {
    content: none;
}

Olá, eu tenho um aviso no meu fórum por causa das próximas mudanças no core do Discourse:

[Aviso do Admin] Um dos seus temas ou plugins precisa ser atualizado para suportar as próximas mudanças no core do Discourse. (id:discourse.script-tag-discourse-plugin) Problema identificado: “Breadcrumb Links”.

Eu estou usando o Discourse cloud, posso resolver isso ou tenho que esperar a atualização do plugin?

@manuel No GitHub, notei que você é um dos contribuidores deste componente, então espero que não se importe de mencioná-lo aqui?

Tenho certeza de que mais pessoas estão vendo esta mesma mensagem:

[Aviso do Administrador] O tema 'Breadcrumb Links' contém código que precisa ser atualizado. (id:discourse.script-tag-discourse-plugin) (saiba mais)

E o Saiba Mais redireciona para:

Há alguma chance de o componente ser atualizado?
Obrigado!

1 curtida

Abri um PR corrigindo este problema, espero que os contribuidores possam revisá-lo e mesclá-lo

2 curtidas

Obrigado por compartilhar! Está funcionando sem a mensagem de aviso.

Estou tendo outro problema que mencionei aqui:

Para esse problema, perguntei ao ChatGPT e ele disse (já que não sou desenvolvedor):

Mostrar mensagem do ChatGPT

O problema provavelmente decorre de como você está extraindo o topicId do URL:

const topicId = url.split('/')[2];

Se o seu URL contiver padrões mais complexos (como títulos com espaços, caracteres especiais ou slugs não padrão), essa simples divisão não obterá de forma confiável o ID do tópico correto.


Por que isso causa problemas:

  • URLs como /t/3ple-2015-2019-title/12345 têm o ID numérico do tópico no final, mas seu código assume que o ID do tópico é sempre o 3º segmento.
  • Se a estrutura do seu URL variar, às vezes você estará pegando um slug ou parte do título em vez do ID.
  • Isso quebra sua solicitação AJAX (/t/${topicId}.json), pois você pode estar enviando um ID de tópico ou slug inválido, retornando informações de categoria incorretas ou padrão (como “Geral”).

Como corrigir:

Use uma maneira mais confiável de extrair o ID do tópico do URL:

  1. Extraia o ID do tópico do último segmento numérico do URL.

URLs de tópicos do Discourse geralmente se parecem com /t/{slug}/{id}, por exemplo:

/t/3ple-2015-2019-title/12345

Aqui, 12345 é o ID do tópico.


Substitua isto:

const topicId = url.split('/')[2];

Por isto:

const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // último segmento, esperado ser o id numérico

Para ter mais segurança, valide se topicId é um número:

if (!/^\\d+$/.test(topicId)) {
  console.error("ID de tópico inválido extraído do URL:", topicId);
  return; // interrompe a execução
}

Resumo: atualize seu trecho de código em updateBreadcrumbs assim:

if (url.includes('/t/')) {
  const segments = url.split('/').filter(Boolean);
  const topicId = segments[segments.length - 1];

  if (!/^\\d+$/.test(topicId)) {
    console.error("ID de tópico inválido extraído do URL:", topicId);
    return;
  }

  // Em seguida, continue suas chamadas AJAX com topicId
}

Dessa forma, você sempre obterá o ID numérico do tópico, independentemente de títulos complexos ou com espaços no URL, corrigindo a busca pela categoria e pelo caminho do breadcrumb.

Você seria capaz de corrigir isso?
Agradeço desde já :raising_hands: