Saltar al contenido principal

Miga de pan

Ficha técnica
  • Impacto — Tema: clase nueva classes/cdigitalnavbar.php, override core_renderer::navbar(), setting enablethemebreadcrumb, SCSS scss/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 en 19723-2726 (página de curso) y 19639-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 #4C4C4C y 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 plantilla core/navbar; la plantilla no se toca, porque cambia entre versiones de Moodle (misma decisión que ya regía el SCSS, ver cabecera de scss/breadcrumb.scss).

Archivos del tema involucrados​

ArchivoFunción
classes/cdigitalnavbar.phpConstruye el rastro por familia de página; único punto de lógica nuevo
classes/output/core_renderer.phpMétodo navbar(): instancia cdigitalnavbar en vez de boostnavbar
settings.phpSetting enablethemebreadcrumb
scss/breadcrumb.scssEstilos (sin cambios de esta implementación, ya existían)
lang/{en,es}/theme_cdigital.phpCadenas breadcrumb_*, enablethemebreadcrumb*

Dependencias​

  • theme_boost\boostnavbar (theme/boost/classes/boostnavbar.php) — se reutilizan sus métodos protected (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() y global_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.