Links de Breadcrumb

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: