Fila de filtros de Mis cursos (/my/courses.php)
- Impacto — Tema: siete overrides de
block_myoverview, AMDmycourses_filters.js, layoutmycourses.phpy plantillamycourses.mustache, SCSS.cdigital-tabfiltery.cdigital-viewtoggle - Impacto — Plugin: —
- Figma:
19658-13096· Estado: Implementado
Propósito
Restila la fila de controles de la página Mis cursos para que use el mismo lenguaje visual que el resto del campus. La fila pasa del grupo de desplegables azules de Boost a una tira de pills a la izquierda (agrupación) y un grupo de búsqueda, orden y vista a la derecha.
Son dos implementaciones distintas del mismo lenguaje visual, sin relación entre sí:
| Esta ficha | Sección del Área personal | |
|---|---|---|
| Página | /my/courses.php | /my/ |
| Origen del contenido | block_myoverview, client-side por Web Services de core | layout/mydashboard.php, 100 % server-side |
| Módulo AMD | mycourses_filters.js | miscursos_tabs.js |
Overrides de block_myoverview
| Plantilla | Qué cambia |
|---|---|
main.mustache | Parte la fila de controles en tira de pills (izquierda) y grupo de búsqueda, orden y vista (derecha); engancha el módulo AMD |
nav-grouping-selector.mustache | El desplegable de agrupación pasa a pills |
nav-display-selector.mustache | El selector de vista pasa a un conmutador de iconos |
nav-sort-selector.mustache | Restilado del selector de orden |
nav-search-widget.mustache | Restilado del buscador |
view-cards.mustache | Rejilla de cards con el lenguaje del tema |
progress-bar.mustache | Barra de progreso de la card |
Por qué el módulo AMD no registra listeners propios
mycourses_filters.js no escucha clics. Observa con MutationObserver los atributos
data-grouping, data-display y data-sort que el propio view_nav.js de core escribe sobre
[data-region="courses-view"], y sincroniza a partir de ellos el estado visual de las pills, el
conmutador de vista y la etiqueta de orden.
La razón es concreta: view_nav.js aborta anticipadamente cuando la opción sobre la que se ha
hecho clic ya lleva la clase active. Un segundo manejador que compitiera por añadir esa clase
antes que core rompería el filtrado en silencio. Observar lo que core escribe elimina cualquier
dependencia de orden entre los dos módulos.
Es el mismo criterio aplicado en
Exploración de cursos por categorías, donde
coursecategories.js tampoco registra listeners propios.
El layout mycourses.php
theme_cdigital declara un layout propio para esta página, casi idéntico al layout de cajones de
Boost. La única razón de su existencia es retirar nonavbar, para que la
miga de pan construida por el tema se muestre también aquí. El resto del
contenido lo sigue renderizando block_myoverview.
Verificación
Como estudiante con varios cursos: las pills de agrupación filtran, el conmutador cambia entre rejilla y lista, el orden se aplica y el buscador encuentra cursos por nombre. Comprobar que el estado visual acompaña siempre al filtrado real: si una pill queda marcada como activa pero la lista no cambia, la sincronización está rota.