Miga de pan
- Impacto — Tema: clase nueva
classes/cdigitalnavbar.php, overridecore_renderer::navbar(), settingenablethemebreadcrumb, SCSSscss/breadcrumb.scss(sin cambios de estilo, solo de alcance) - Impacto — Plugin: —
- Requisito:
requierments/analisis miga de pan.md(raíz del repositorio) · Figma:19613-9788(componente), aplicado en19723-2726(página de curso) y19639-4622(catálogo de categorías) · Estado: Implementado
Propósito
Rastro de navegación (Inicio › nivel › nivel › página actual) en la banda blanca superior del contenido, sobre curso, sección, actividad, el catálogo de categorías, el buscador de cursos y el área personal. Moodle no genera este rastro de forma nativa en la mayoría de esas páginas —ver "Por qué existe" más abajo—, así que el tema lo construye.
Funcionalidades
- Banda blanca de 24px de espaciado vertical, alineada con la columna de contenido; se oculta por completo cuando el rastro tiene un solo nivel o llega vacío.
- Separador: chevron de 16×16 exportado de Figma. Tipografía Nunito Sans 14px, interlineado 1.5.
- Todo item navegable en cobalto
#0943B5, subrayado al pasar el mouse o al enfocar con teclado. Página actual en matterhorn#4C4C4Cy negrilla, sin afordancia de enlace. - Alcance: curso, sección y actividad; catálogo de categorías (
/course/index.php); buscador de cursos (/course/search.php); área personal (/my/,/my/courses.php). El resto del sitio (administración, informes, perfil, preferencias) conserva el rastro nativo de Boost. - Cuando el usuario no está matriculado en el curso que ve (invitado, visitante, administrador explorando), el segundo nivel deja de ser "Mis Cursos" y pasa a ser "Categorías" seguido de la cadena de categorías del curso.
- Interruptor
theme_cdigital/enablethemebreadcrumb(activado por defecto): al desactivarlo, todo el sitio vuelve al rastro nativo de Boost sin redesplegar.
Por qué existe
Moodle 4.0 desplazó la miga de pan como mecanismo principal de orientación en favor de la
navegación primaria, la secundaria y el índice de curso lateral; el árbol de navegación del sitio
solo produce un rastro cuando encuentra un nodo activo, y en varias familias de página no lo
encuentra. Además, theme_boost\boostnavbar —heredado sin cambios por theme_cdigital— poda
deliberadamente ese rastro: en contexto de curso elimina "Mis cursos", "Cursos", los nodos de
categoría y, en una vista de curso simple, el nodo del curso mismo, y si al final queda un solo
item, lo vacía por completo. El resultado observable es <ol class="breadcrumb"></ol> vacío en
/course/view.php, /course/index.php, /my/, /my/courses.php y páginas equivalentes.
Detalle completo del diagnóstico y la decisión de alcance en ADR-005.
Desviación respecto al Figma
El Figma aplicado (19613-9788 en 19723-2726) solo pinta "Inicio" en cobalto subrayado; el
resto de los niveles —incluidos los que son enlaces navegables reales, como "Mis Cursos"— aparece
en texto plano gris, igual que la página actual. La implementación pinta en cobalto todo item
navegable y reserva la negrilla para la página actual, por accesibilidad (el usuario distingue qué
es clicable) y coherencia con el patrón estándar de breadcrumb. Confirmado con diseño.
Arquitectura
theme_cdigital\cdigitalnavbar extiende theme_boost\boostnavbar y sobrescribe únicamente
prepare_nodes_for_boost(). Para las páginas fuera de alcance, delega sin cambios en
parent::prepare_nodes_for_boost().
- Páginas autocontenidas (área personal, mis cursos, catálogo de categorías, buscador): el rastro completo se construye desde cero con nodos propios.
- Curso / sección / actividad: solo se reemplaza la cabeza del rastro (Inicio, Mis Cursos o Categorías + cadena, Curso). Lo que viene después del nodo del curso (sección, actividad) se toma tal cual de lo que Boost ya produjo — Boost resuelve esos casos correctamente, el problema estaba solo en la cabeza.
core_renderer::navbar()(classes/output/core_renderer.php) solo cambia la clase renderable que se pasa a la plantillacore/navbar; la plantilla no se toca, porque cambia entre versiones de Moodle (misma decisión que ya regía el SCSS, ver cabecera descss/breadcrumb.scss).
Archivos del tema involucrados
| Archivo | Función |
|---|---|
classes/cdigitalnavbar.php | Construye el rastro por familia de página; único punto de lógica nuevo |
classes/output/core_renderer.php | Método navbar(): instancia cdigitalnavbar en vez de boostnavbar |
settings.php | Setting enablethemebreadcrumb |
scss/breadcrumb.scss | Estilos (sin cambios de esta implementación, ya existían) |
lang/{en,es}/theme_cdigital.php | Cadenas breadcrumb_*, enablethemebreadcrumb* |
Dependencias
theme_boost\boostnavbar(theme/boost/classes/boostnavbar.php) — se reutilizan sus métodosprotected(prepare_nodes_for_boost()sobrescrito;remove_last_item_action(),item_count(),clear_items()usados sin cambios). Acoplamiento a un método interno del tema del núcleo, no a una API pública — ver riesgos de actualización en ADR-005.core\navigation\navbar::get_items()yglobal_navigation(sin modificar) para el nodo activo nativo que sirve de ancla en curso/sección/actividad.
Historial de cambios
Ver CHANGELOG.md en la raíz del sitio de documentación.