Muchas gracias @manuel. He actualizado este componente con tu código (y he añadido algunos fragmentos de código más) para habilitar funcionalidades adicionales:
Ahora se admiten subcategorías en el Breadcrumb.
El Breadcrumb completo aparece ahora en todas las páginas de Listado de Categorías y Subcategorías, además de las páginas de Temas.
Ahora hay una configuración para habilitar o deshabilitar en dispositivos móviles.
Solo hay un detalle que quizás sepas cómo arreglar.
El botón de retroceso desaparece al desplazarse hacia abajo (por favor, vea el video adjunto)… ¿es posible fijar/mantener el botón de retroceso en la parte superior de la pantalla para que permanezca visible incluso al desplazarse?
Contexto: la comunidad está incrustada (webview) en nuestra aplicación móvil.
Noté que no hay forma de decidir dónde van las migas de pan, lo cual sería genial. Por ejemplo, estoy usando los banners de categoría y me gustaría que las migas de pan estuvieran encima de ellos.
Se pierde un poco cuando está debajo.
¿Hay alguna posibilidad de cambiar esto?
Gracias
Acabo de notar algo que podría arreglarse (o al menos tener la opción de activarlo o desactivarlo). No creo que la última / deba estar ahí.
Así que sería solo Inicio / Discusión General en lugar de Inicio / Discusión General /
EDITAR:
Acabo de usar CSS para hacer eso, pero creo que podría ser el predeterminado. En caso de que alguien lo quiera:
/* Eliminar separador (contenido ::after) del último elemento de miga de pan */
.breadcrumbs li:last-child::after {
content: none;
}
Este es un pequeño ajuste, pero me parece que se ve mejor. Aumenta el margin-bottom a 1rem para darle más espacio para “respirar”, pero también lo centra cuando hay un banner (si tenemos que mantener esa posición en la página). Mira mi imagen anterior (el 0.5rem predeterminado) en comparación con el uso de 1rem:
Resultado final después de todos los ajustes CSS que hice:
CSS:
/* migas de pan - eliminar fondo y aumentar margin-bottom */
.breadcrumbs {
background-color: transparent !important;
margin-bottom: 1rem;
}
/* migas de pan - ocultar flecha hacia atrás del enlace Inicio */
.breadcrumbs__title .d-icon {
display: none;
}
/* migas de pan - eliminar separador (contenido ::after) del último elemento de miga de pan */
.breadcrumbs li:last-child::after {
content: none;
}
Hola, tengo una advertencia en mi foro debido a los próximos cambios en el núcleo de Discourse:
[Aviso de administrador] Uno de sus temas o plugins necesita ser actualizado para soportar los próximos cambios en el núcleo de Discourse. (id:discourse.script-tag-discourse-plugin) Problema identificado: “Breadcrumb Links”.
Estoy usando Discourse cloud, ¿puedo solucionar esto o tengo que esperar la actualización del plugin?
@manuel En GitHub noté que eres uno de los colaboradores de este componente, así que espero que esté bien mencionarte aquí.
Estoy seguro de que más personas están viendo este mismo mensaje:
[Aviso de administrador] El tema 'Breadcrumb Links' contiene código que necesita ser actualizado. (id:discourse.script-tag-discourse-plugin) (más información)
Y el Más información redirige a:
¿Hay alguna posibilidad de que el componente se actualice?
¡Gracias!
¡Gracias por compartir esto! Está funcionando sin el mensaje de advertencia.
Tengo otro problema que mencioné aquí:
Para ese problema, le pregunté a ChatGPT y me dijo (ya que no soy desarrollador):
Mostrar mensaje de ChatGPT
El problema probablemente se deba a cómo extraes el topicId de la URL:
const topicId = url.split('/')[2];
Si tu URL contiene patrones más complejos (como títulos con espacios, caracteres especiales o slugs no estándar), esta simple división no obtendrá de manera confiable el ID de tema correcto.
Por qué esto causa problemas:
URLs como /t/3ple-2015-2019-title/12345 tienen el ID de tema numérico al final, pero tu código asume que el ID de tema siempre es el tercer segmento.
Si la estructura de tu URL varía, a veces estás capturando un slug o parte del título en lugar del ID.
Esto rompe tu solicitud AJAX (/t/${topicId}.json) porque puedes estar enviando un ID de tema o slug inválido, devolviendo información de categoría incorrecta o predeterminada (como “General”).
Cómo solucionarlo:
Utiliza una forma más confiable de extraer el ID de tema de la URL:
Extrae el ID de tema del último segmento numérico de la URL.
Las URLs de temas de Discourse a menudo se ven como /t/{slug}/{id}, por ejemplo:
/t/3ple-2015-2019-title/12345
Aquí, 12345 es el ID del tema.
Reemplaza esto:
const topicId = url.split('/')[2];
Con esto:
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // último segmento, se espera que sea el id numérico
Para estar más seguro, valida que topicId sea un número:
if (!/^\\d+$/.test(topicId)) {
console.error("ID de tema inválido extraído de la URL:", topicId);
return; // detiene la ejecución
}
Resumen: actualiza tu fragmento de código en updateBreadcrumbs de esta manera:
if (url.includes('/t/')) {
const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1];
if (!/^\\d+$/.test(topicId)) {
console.error("ID de tema inválido extraído de la URL:", topicId);
return;
}
// Luego continúa tus llamadas AJAX con topicId
}
De esta manera, siempre obtienes el ID de tema numérico independientemente de títulos complejos o con espacios en la URL, corrigiendo la búsqueda de la categoría y la ruta de las migas de pan.