Saltar al contenido principal

theme_cdigital

Ficha técnica

Componente: theme_cdigital (tema, hijo de Boost) · Ruta: public/theme/cdigital/ Versión: 2026081404 (release 0.1.0, madurez ALPHA) · Requiere: Moodle ≥ 4.5 ⚠ (ver Manifiesto) Impacto: Tema · Plugin asociado: local_pccntr8203403_dashboard

Tema que reimplementa la apariencia del Campus Virtual siguiendo el diseño de Figma y renderiza el Dashboard de aprendizaje. Extiende Boost: hereda su comportamiento y sobreescribe layouts, plantillas, renderers, SCSS y strings.

Estructura​

Carpeta / archivoContenido
config.phpRegistro del tema, layouts, sistema de íconos
lib.phpRenderers (theme_cdigital_core_course_renderer, core_renderer) y helpers de frontpage
settings.phpAjustes de administración — ver Ajustes del tema
layout/frontpage.php, mycourses.php, mydashboard.php (+ drawers de Boost)
templates/Plantillas Mustache (core overrides + componentes propios)
classes/output/core_renderer.phpInyecta el banner, arma la modal "Ver mi avance" (7 cards), inyecta el Drawer IA, sobrescribe navbar() para la miga de pan, y full_header()/course_content_footer() para la tarjeta "héroe" y la navegación del marco de secciones en vista de una sola sección
classes/cdigitalnavbar.phpConstruye el rastro de la miga de pan por familia de página, extendiendo theme_boost\boostnavbar
classes/output/core/course_renderer.phpOverride de coursecat_coursebox() (y de course_category(), coursecat_category(), coursecat_category_content()) para la card de resultados de búsqueda y la exploración de cursos por categorías, extiende theme_cdigital_core_course_renderer (lib.php)
scss/preset/cdigital.scssPunto de entrada SCSS (incluye Boost)
scss/mixins.scss@mixin cdigital-chevron-toggle() — mecanismo de chevron compartido por courseindex.scss, coursesections.scss y activitypage.scss; se concatena primero
scss/coursesections.scssMarco de secciones del curso (acordeón de borde redondeado + cabecera sombreada) y, en vista de una sola sección, tarjeta "héroe" + navegación
scss/activitypage.scssMarco del contenido de página de actividad (tarjeta de descripción, navegación de actividad, acordeón de mod_assign, tarjeta de archivos de mod_folder)
amd/src/Módulos JS (ver abajo)
pix/Imágenes e íconos (branding, íconos de la modal, ilustraciones)
lang/{en,es}/Cadenas de idioma

Features que renderiza​

Cada una tiene su ficha en el Catálogo:

FeaturePlantilla / punto de render
Fila "Contenido del curso" + insigniascourse_content_header.mustache + full_header()
Banner "Tu desempeno academico"course_info_banner.mustache + full_header()
Modal "Ver mi avance"course_progress_modal.mustache + core_renderer
Stats Row del Area personalstats_row.mustache + mydashboard.php
Welcome Herowelcome_hero.mustache
Card "Continua donde quedaste"continue_card.mustache
Card de cursocore_course/coursecard.mustache + AMD
Card de curso en resultados de búsquedacourse_search_card.mustache + course_search_header.mustache + course_search_hero.mustache + classes/output/core/course_renderer.php
Exploración de cursos por categoríascoursecategory_card.mustache + coursecategory_subcat.mustache + coursecategory_courserow.mustache + course_search_hero.mustache (compartido) + classes/output/core/course_renderer.php
Sección "Mis Cursos" del Área personalmiscursos_section.mustache + mydashboard.php + AMD miscursos_tabs.js
Drawer IAaitutor_drawer.mustache + standard_after_main_region_html() + AMD aitutor.js
Bloque "Cursos que necesitan atención"Solo SCSS: .cdigital-atencion* y override del chrome de bloque en .cdigital-activitypanel (el markup lo aporta block_pccntr8203403_atencion)
Portada (frontpage)frontpage.mustache + helpers de lib.php
Carrusel de banners de la portadafrontpage.mustache + theme_cdigital_get_banner_slides() + AMD banner_carousel.js
Miga de panclasses/cdigitalnavbar.php + core_renderer::navbar()
Pestañas de secciones del curso (format_onetopic)Solo SCSS: scss/coursetabs.scss (el markup lo aporta el plugin format_onetopic)
Marco de secciones del cursoscss/coursesections.scss (el markup del acordeón lo aporta core_courseformat, sin overrides de plantilla) + section_hero_row.mustache/section_navigation_row.mustache (plantillas propias, vista de una sola sección)
Marco del contenido de actividadSolo SCSS: scss/activitypage.scss (el markup lo aportan core\output\activity_header, core_course\output\activity_navigation, formslib y mod_folder, sin overrides de plantilla)

Módulos AMD​

MóduloFunción
aitutor.jsDrawer IA: toggle open/close, envio de mensajes al proxy local_pccntr8203403_aitutor, render de respuestas, lectura de SCORM CMI
banner_carousel.jsCarrusel de banners de la portada: rotación automática, flechas, puntos, pausa/reanudación y prefers-reduced-motion
coursecard_favourite.jsToggle de favorito en la card de curso (WS core core_course_set_favourite_courses)
coursecard_teachers.jsCarga batcheada de nombres de docentes (WS ..._get_course_teachers)
coursecategories.jsSincroniza aria-expanded en las cards/filas de la exploración de cursos por categorías a partir de la clase collapsed que ya gestiona moodle-course-categoryexpander (sin listeners de clic propios)
frontpage_header_scroll.jsComportamiento del encabezado de la portada al hacer scroll
miscursos_tabs.jsFiltro client-side por pestaña (Todos/En Curso/Completados) de la sección Mis Cursos
mycourses_filters.jsFila de filtros de /my/courses.php. No registra listeners propios: observa con MutationObserver los atributos data-grouping/data-display/data-sort que escribe view_nav.js de core
repository.jsWrappers de core/ajax para los WS anteriores

Son nueve módulos y los nueve se entregan compilados en amd/build/. Build: ver Build de assets.

Dependencias​

  • Consume las clases de datos del plugin local (course_stats, student_stats, academic_alerts) desde su renderer y layouts, y su Web Service get_course_teachers. El otro Web Service del plugin, get_student_panel, no lo consume el tema: es para el servicio de IA externo.
  • Renderiza el Drawer IA e invoca la funcion send_message de local_pccntr8203403_aitutor via el modulo AMD aitutor.js.
  • Para secciones con equivalente nativo (Usuarios en linea, Insignias) usa bloques core estilizados con CSS del tema (ADR-002). El calendario es la excepción: además del SCSS lleva dos overrides de plantilla core (core_calendar/month_detailed y month_navigation), copiados verbatim de la 501 y ampliados solo con clases cdigital-cal__*, para que el SCSS del tema no dependa de las clases presentacionales de core.

Acoplamiento con block_xp (Gamification Sidebar)​

El tema sobrescribe el renderer y dos plantillas de block_xp para la Card 1 del Gamification Sidebar: classes/output/block_xp_renderer.php, templates/block_xp/xp-widget.mustache y templates/block_xp/progress-bar.mustache, más templates/blockxp_levelname.mustache (ADR-004).

Son copias y extensiones que dependen del contrato interno del plugin: las variables de contexto de sus plantillas y la firma de level_name. El acoplamiento es blando —el peor caso es volver al aspecto por defecto, los datos de XP no corren riesgo— pero hay que vigilarlo.

#RiesgoMitigación
1Un upgrade de block_xp renombra variables de contexto o cambia la firma de level_nameEn cada actualización: diff de blocks/xp/templates/{xp-widget,progress-bar,level-badge}.mustache y de renderer.php::level_name contra las copias del tema
2block_xp migra a un renderer con espacio de nombresLa factory dejaría de resolver la clase del tema en silencio: vuelve el aspecto por defecto sin ningún error
3La caché de plantillas oculta el cambioPurgar cachés y subir la versión del tema tras cualquier ajuste

Parámetros de la instancia del bloque​

Valores con los que se instala la Card 1 en la región lateral del curso, y que aplica el paso 3 del despliegue:

BloqueRegiónPesoNotas
block_xpside-pre−2pagetypepattern='*', showinsubcontexts=1
block_pccntr8203403_logrosside-pre−1—
block_stashside-pre0Sin cambios funcionales

A nivel sitio: blocktitle = "Tu gema de experiencia", blockrankingsnapshot = 0, blockdescription vacío. Si una instancia de curso trae una fila propia en mdl_block_xp_config, esa fila pisa los valores por defecto y hay que alinearla.

Riesgos de actualización​

  • El tema sobreescribe plantillas core (core_course/coursecard, core/header, etc.). Una actualización mayor de Moodle puede cambiar esas plantillas o el contexto que reciben; revisar los overrides tras cada upgrade de branch.
  • La miga de pan (classes/cdigitalnavbar.php) sobrescribe un método protected de theme_boost\boostnavbar (prepare_nodes_for_boost()), no una API pública. Checklist de upgrade en ADR-005.
  • La card de curso depende del flujo client-side de block_myoverview (WS core + Templates.render); cambios en ese flujo afectan el override. Detalle en Card de curso.
  • requires declarado en version.php apunta a Moodle 4.5 (placeholder); alinear a 5.0/5.1.