TL;DR
Si buscas crear un tema hijo Boost Moodle, esta guía te explica por qué es la ruta profesional para que tu campus virtual refleje tu marca sin tocar el núcleo: heredas Boost y añades personalizaciones seguras, mantenibles y escalables. Antes de empezar, define objetivos, alinea al equipo y versiona con Git. El proceso técnico se condensa en cinco pasos: clonar un entorno de pruebas, crear el directorio mi_campus, añadir archivos mínimos, activar el tema e iniciar el estilado con SCSS y plantillas Mustache. Además, se incluyen optimizaciones de rendimiento, accesibilidad y UX, junto con integraciones de analítica, LTI y CRMs. El resultado: un Moodle más rápido, atractivo y que fideliza a tu comunidad.
Personalizar Moodle con un tema hijo Boost es, sin duda, una de las decisiones más inteligentes que puedes tomar si buscas convertir esta potente plataforma LMS en una experiencia digital auténticamente alineada con la identidad institucional de tu organización. Moodle no es simplemente un sistema de gestión del aprendizaje: es una solución flexible, robusta y escalable que, bien configurada, puede actuar como el verdadero centro estratégico de la formación en contextos tanto educativos como corporativos.
Gracias a su extraordinario nivel de personalización, Moodle permite adaptarse no solo a requerimientos pedagógicos y técnicos, sino también a criterios visuales, operativos y de marca. Sin embargo, en la práctica, muchas instituciones siguen utilizándolo con su configuración predeterminada. El resultado: una plataforma funcional, sí, pero genérica, impersonal y desconectada de los valores que representan su propuesta educativa o empresarial.
Esta guía ha sido pensada específicamente para ti. Tal vez seas Laura, liderando la transformación digital en una institución educativa que desea que su campus virtual refleje la calidad y la excelencia pedagógica que ofrece cada día. O tal vez seas Carlos, responsable de formación en una empresa, y necesites que Moodle esté alineado con la cultura, el lenguaje y los valores de tu organización.
En cualquiera de los dos escenarios, el objetivo es claro: ayudarte a personalizar Moodle con un tema hijo Boost y convertirlo en una plataforma moderna, profesional y visualmente coherente. Una plataforma que no solo funcione con eficiencia, sino que también comunique, motive y genere confianza en cada usuario.
A lo largo de este artículo:
- Descubrirás cómo adaptar el diseño de Moodle para que refleje fielmente tu identidad institucional.
- Aprenderás a crear un tema hijo de Boost que sea accesible, funcional y sostenible en el tiempo.
- Verás cómo estos cambios impactan directamente en la motivación, participación y retención de tus usuarios.
Porque sí: un Moodle personalizado no solo luce mejor. También enseña mejor, comunica con más claridad y se convierte en un auténtico aliado estratégico en tus procesos formativos.
¿Estás listo para transformar tu Moodle en una experiencia alineada con tu marca, tus usuarios y tus objetivos?
🚀 ¡Empecemos!
TABLA DE CONTENIDOS
¿Qué es un Theme y cómo personalizar Moodle con Boost?
Cuando hablamos de cómo personalizar Moodle con un tema hijo Boost, no nos referimos únicamente a cambiar el logotipo o ajustar un color corporativo. El theme es mucho más que eso: es el motor visual que define por completo la experiencia del usuario en la plataforma.
Desde los colores institucionales, tipografías y estilos de botones, hasta la estructura de los menús y la disposición de los bloques de contenido, todo en Moodle está gobernado por su theme. Por eso, entender su funcionamiento y cómo adaptarlo resulta clave para construir un entorno virtual alineado con tu identidad educativa o empresarial.
Boost: El punto de partida ideal
Por defecto, Moodle viene con Boost, un theme moderno, responsive y altamente flexible. Funciona como la base estructural sobre la que se desarrollan la mayoría de los diseños actuales. Pero utilizar Boost sin modificarlo es como entregar una presentación en blanco: funcional, sí, pero sin alma. Y ahí es donde entra la necesidad de personalizar.
¿Por qué personalizar un theme va más allá de lo estético?
Porque el diseño no solo embellece: comunica, refuerza y transforma. Un buen diseño:
- Expresa quién eres como institución o marca.
- Refuerza tu identidad visual y cultura organizacional.
- Mejora la usabilidad y la experiencia del usuario.
- Incrementa el compromiso y la percepción de valor.
Ya seas Laura, directora TIC en un colegio que apuesta por la innovación pedagógica, o Carlos, líder de formación en una empresa comprometida con la capacitación interna, entender cómo personalizar Moodle con un tema hijo Boost marcará una diferencia real en cómo se percibe y se utiliza tu plataforma.
Dos formas de personalizar Moodle visualmente
Existen dos caminos principales para adaptar el diseño de Moodle según tus recursos y objetivos estratégicos:
1. Desarrollar tu propio theme personalizado
Esta opción es perfecta si deseas un control total sobre la estética y las funcionalidades. La mejor práctica técnica es crear un tema hijo de Boost, ya que te permite:
- Heredar todas las capacidades y mejoras del tema original.
- Sobrescribir únicamente lo que deseas modificar.
- Mantener compatibilidad con futuras versiones de Moodle.
Ideal para proyectos que necesitan una solución sostenible, alineada con los objetivos de marca y preparada para el largo plazo.
2. Utilizar un theme comercial profesional
Si lo que buscas es rapidez de implementación y un resultado visual atractivo desde el primer día, puedes optar por un theme premium de plataformas como ThemeForest. Estas opciones ofrecen:
- Diseños modernos y adaptativos.
- Plantillas listas para usar.
- Personalizaciones visuales sin necesidad de código.
Una excelente alternativa para organizaciones sin equipo técnico interno, pero con altas exigencias estéticas.
¿Qué camino escoger?
Ambas opciones son válidas. Lo importante es no quedarte con el diseño por defecto. En el entorno digital, la apariencia no es superficial: enseña, comunica, emociona y fideliza.
Y si tu objetivo es una solución sólida, adaptable y profesional, recuerda que personalizar Moodle con un tema hijo Boost es el enfoque más confiable, escalable y alineado con buenas prácticas de desarrollo.
La Importancia Estratégica de Personalizar Moodle
Tanto si lideras la transformación digital en un centro educativo como Laura, como si coordinas la formación interna en una empresa como Carlos, hay una idea esencial que debes tener clara: personalizar Moodle con un tema hijo Boost no es solo una cuestión estética. Es una decisión estratégica.
Una plataforma adaptada a tu institución impacta directamente en la usabilidad, la identidad de marca y, sobre todo, en la eficacia de los procesos formativos. No se trata de cambiar colores al azar, sino de diseñar una experiencia que hable el lenguaje de tu comunidad educativa o corporativa.
¿Por qué personalizar Moodle con un tema hijo de Boost?
Porque, cuando se hace correctamente, cada clic se convierte en una experiencia de aprendizaje más fluida, significativa y alineada con tus objetivos. Estos son algunos de los beneficios clave:
Mejora la usabilidad y la experiencia del usuario
Al adaptar la interfaz a las necesidades reales de estudiantes, docentes o empleados:
- Se facilita la navegación y el acceso a los recursos clave.
- Se reduce la curva de aprendizaje, incluso para quienes no tienen experiencia previa.
- Se fomenta la autonomía tanto del alumnado como del personal.
El resultado: una comunidad más motivada, ágil y satisfecha desde el primer contacto con la plataforma.
Refuerza tu identidad institucional o de marca
Un Moodle adaptado a tu identidad visual —colores, logotipo, tipografía—:
- Proyecta una imagen profesional, coherente y cuidada.
- Refuerza el vínculo emocional con la institución o empresa.
- Genera un mayor sentido de pertenencia y compromiso.
Tu Moodle deja de parecer una plataforma genérica. Se convierte en una extensión natural de tu marca.
Optimiza los procesos de aprendizaje y formación
Personalizar también significa adaptar Moodle a nivel funcional:
- Simplificar flujos de trabajo según tus necesidades pedagógicas o empresariales.
- Automatizar tareas repetitivas, ahorrando tiempo y evitando errores.
- Mejorar la navegación y reducir fricciones en el uso diario.
El resultado es una herramienta eficiente, intuitiva y adaptada a tu estrategia., Moodle se transforma en una herramienta eficiente, centralizada y alineada con tu estrategia educativa o empresarial.
Aumenta la participación, satisfacción y retención
Una plataforma centrada en la experiencia del usuario:
- Impulsa la implicación en los cursos.
- Mejora las tasas de finalización y evaluación continua.
- Facilita el seguimiento por parte de docentes o equipos de formación.
Un diseño pensado para las personas no solo mejora la estética, también mejora los resultados.
En resumen
Personalizar Moodle con un tema hijo de Boost es una decisión estratégica.
No se trata únicamente de mejorar su apariencia, sino de transformarlo en una herramienta que enseña, comunica, conecta y genera compromiso.
¿Y tú? ¿Estás preparado para que tu Moodle refleje el carácter, la identidad y los valores de tu institución o empresa?
¿Por Qué Personalizar Moodle con un Tema Hijo de Boost y No Modificar Directamente Boost?
Más allá de la estética: estabilidad, sostenibilidad y buenas prácticas
Cuando decides adaptar Moodle para reflejar la identidad visual de tu institución o empresa, el cómo lo haces es tan importante como el resultado final. Aunque modificar directamente el tema Boost puede parecer una solución rápida, compromete la estabilidad, el mantenimiento y la evolución futura de tu plataforma.
Por eso, tanto la comunidad de desarrolladores de Moodle como cualquier profesional con experiencia recomienda una alternativa sólida: 👉 crear un tema hijo basado en Boost.
¿Qué es un tema hijo (child theme)?
Un tema hijo es un tema que hereda todas las funcionalidades del tema principal (Boost), pero te permite personalizar estilos, plantillas y comportamientos sin modificar el código original.
Esto te permite adaptar Moodle a tus necesidades sin renunciar a una base limpia, segura y preparada para el crecimiento, algo esencial si gestionas una plataforma a medio o largo plazo.
Ventajas clave de utilizar un child theme
1. Estabilidad ante actualizaciones
Cuando se actualiza Moodle o el tema Boost, tu tema hijo sigue funcionando sin perder las personalizaciones. Esto:
- Minimiza errores tras cada nueva versión.
- Evita tener que rehacer ajustes visuales.
- Ahorra muchas horas de trabajo técnico.
2. Mantenimiento más ágil y ordenado
Al mantener tus personalizaciones separadas del núcleo de Moodle:
- Es más fácil detectar y corregir errores.
- Puedes trabajar en equipo sin sobrescribir cambios.
- Dispones de una estructura clara para futuras mejoras.
3. Escalabilidad a medida que tu organización crece
Moodle evoluciona, y tu institución también. Un tema hijo te permite:
- Añadir nuevas funcionalidades cuando lo necesites.
- Ajustar el diseño de forma flexible.
- Integrar herramientas externas sin complicaciones.
4. Alineación con las buenas prácticas de desarrollo
No se trata solo de una solución técnica: usar un tema hijo es el enfoque profesional recomendado por la propia documentación oficial de Moodle.
- Mejora la legibilidad y organización del código.
- Facilita el trabajo colaborativo.
- Garantiza un desarrollo sostenible a largo plazo.
En resumen
Si quieres que tu Moodle sea visualmente atractivo, técnicamente sólido y evolucione sin sobresaltos, la mejor opción es crear un tema hijo a partir de Boost.
Personalizar Moodle con un tema hijo no solo es más limpio: es más robusto, escalable… y mucho más inteligente.
Planificación Inicial: Antes de Personalizar Moodle con un Tema Hijo Boost
Una personalización efectiva de Moodle no comienza con líneas de código, sino con una planificación estratégica bien pensada. Este paso es esencial tanto para equipos de Tecnología Educativa como para responsables de Formación Corporativa, como Laura o Carlos, que buscan asegurar que su inversión sea eficaz, sostenible y con impacto real.
Antes de empezar a personalizar Moodle con un tema hijo Boost, asegúrate de tener bien definidos estos elementos clave.
🎯 Define los objetivos de tu personalización
Todo diseño con propósito comienza con una pregunta central:
¿Qué queremos mejorar al personalizar Moodle?
- ¿Facilitar la navegación de estudiantes o empleados?
- ¿Reflejar la identidad visual institucional o corporativa?
- ¿Aumentar la participación y retención de usuarios?
- ¿Optimizar flujos de trabajo o automatizar tareas repetitivas?
Cuanto más claro y consensuado esté el objetivo, más eficiente y alineada será la implementación técnica y visual.
👥 Consulta con los perfiles clave de tu organización
Personalizar Moodle con un tema hijo Boost no es solo una tarea técnica: es un proceso colaborativo. Involucra a quienes usarán la plataforma a diario:
- Docentes, capacitadores o formadores internos
- Estudiantes o empleados en formación
- Administradores del LMS
- Equipos de soporte técnico y atención al usuario
Sus aportes te permitirán detectar necesidades reales, fricciones ocultas y oportunidades de mejora funcional.
📄 Documenta tu planificación
Una hoja de ruta clara evitará retrabajo y facilitará la escalabilidad. Debe incluir:
- Requisitos técnicos: versión de Moodle, integraciones clave, compatibilidades.
- Necesidades pedagógicas o de formación interna: actividades frecuentes, rutas de aprendizaje, recursos prioritarios.
- Wireframes o mockups de las pantallas principales (pueden estar hechos en Figma, Notion o incluso a mano).
💡 Consejo experto: prototipa en papel o pizarra antes de programar. Es más rápido, económico y excelente para validar ideas.
🔗 Coordina con los departamentos relevantes
El éxito de tu personalización depende de una alineación interdepartamental efectiva. Asegúrate de trabajar con:
- Marketing o Comunicación: para obtener paleta de colores, logotipo, tipografía y manual de marca.
- Formación o Docencia: para comprender flujos, tipos de contenidos y objetivos pedagógicos.
- Usuarios finales: realiza pequeñas entrevistas con perfiles representativos para obtener feedback real antes de rediseñar.
Antes de Escribir una Línea de Código: Control de Versiones y Comunicación
Uno de los errores más frecuentes en los proyectos de personalización de Moodle —especialmente cuando no hay un equipo técnico especializado— es caer en el clásico: «Subo por FTP y edito en directo». Aunque pueda parecer ágil, es una práctica arriesgada, poco profesional y muy costosa a medio y largo plazo.
Si vas a personalizar Moodle con un tema hijo Boost, necesitas más que voluntad: necesitas disciplina técnica. Y todo comienza por implementar Git como sistema de control de versiones.
Git no es opcional: es esencial
Git no es solo una buena práctica: es el estándar profesional en cualquier proyecto de desarrollo web, incluyendo personalizaciones pequeñas o medianas en Moodle.
¿Por qué es indispensable trabajar con Git?
- Historial completo de cambios: sabrás quién hizo qué, cuándo y por qué.
- Reversión de errores: puedes volver a un estado estable con un solo comando.
- Colaboración estructurada: ideal para equipos distribuidos o con proveedores externos.
- Automatización: permite integrar CI/CD, despliegues automáticos y validación de código.
- Trazabilidad y seguridad: evitas sobrescrituras accidentales y garantizas control total.
Incluso si Moodle está en un servidor compartido, puedes trabajar con Git desde tu entorno local o staging, y luego desplegar con seguridad.
¿Todavía no usas Git? Empieza hoy mismo
Si aún no tienes tu repositorio Git, este es el mejor momento para iniciarte. Plataformas como:
- GitHub (ideal para proyectos personales o públicos)
- GitLab (excelente para equipos con control granular y CI/CD integrado)
- Bitbucket (compatible con repos privados y pipelines de despliegue)
… ofrecen planes gratuitos para almacenar, versionar y colaborar sobre tu código, incluso si es un proyecto interno.
Los riesgos de trabajar sin control de versiones
Modificar archivos directamente en el entorno de producción —ya sea por FTP o cPanel— parece cómodo, pero es una receta para el desastre. Estos son algunos riesgos comunes:
- No poder deshacer cambios si algo falla.
- Errores humanos que dejan la plataforma inoperativa.
- Conflictos entre personas que editan los mismos archivos.
- Pérdida de trazabilidad sobre qué versión está activa.
- Incidencias difíciles de diagnosticar o reproducir.
En resumen: sin Git, cada cambio es un salto al vacío.
¿Tienes previsto actualizar Moodle en el futuro?
Entonces, usar Git no es negociable. Las personalizaciones —sobre todo al personalizar Moodle con un tema hijo Boost— deben estar preparadas para sobrevivir a actualizaciones del core.
💡 Recurso útil: 👉 Mantén tu Moodle al Día — Guía profesional para una actualización exitosa. En ella explico cómo planificar upgrades, evitar roturas y utilizar Git como tu mejor aliado técnico.
Comunicación: el otro pilar imprescindible
Antes de escribir una sola línea de código, asegúrate de responder a estas preguntas con tu equipo:
- ¿Tienes acceso al repositorio oficial del proyecto?
- ¿Existen entornos separados para desarrollo y producción?
- ¿Están documentadas las prácticas de desarrollo heredadas?
- ¿Alguien más está haciendo cambios simultáneamente?
Una reunión de coordinación de 30 minutos puede ahorrarte días enteros de trabajo perdido.
Checklist mínima antes de desarrollar tu tema hijo Boost
Antes de personalizar Moodle con un tema hijo Boost, asegúrate de lo siguiente:
- Estás trabajando en un entorno local o staging, nunca en producción.
- El código está bajo control de versiones con Git.
- Tienes ramas separadas para pruebas y producción.
- Conoces las convenciones internas del equipo o proveedor.
- Puedes probar antes de desplegar en producción.
¿Qué Opciones de Personalización Ofrece el Theme Boost?
El theme Boost, incluido por defecto en todas las instalaciones de Moodle desde la versión 3.2, es una base moderna, accesible y altamente flexible. Para muchas instituciones educativas o empresas, ofrece una experiencia inicial correcta. Pero si tu objetivo es personalizar Moodle con un tema hijo Boost, es importante conocer primero hasta dónde puedes llegar sin necesidad de tocar código.
🔧 Personalizaciones disponibles desde el panel de administración
Puedes acceder fácilmente a estas configuraciones visuales desde:Administración del sitio > Apariencia > Temas > Boost
A continuación, te mostramos las principales opciones:
Identidad visual
- Logotipo institucional: se muestra en la cabecera del sitio.
- Favicon personalizado: el icono que se ve en las pestañas del navegador.
- Color de marca principal: se aplica a botones, enlaces activos y menús.
- Tipografía: limitada a algunas fuentes preconfiguradas.
- Colores base: ajustes simples para fondo y texto.
Menú personalizado
- Añade enlaces propios en la barra de navegación superior.
- Permite crear submenús jerárquicos para una navegación más rica.
- Puedes vincular recursos internos como la normativa, el centro de ayuda o la intranet corporativa.
Gestión de bloques
- Reorganiza bloques en el dashboard y en la página de inicio.
- Añade bloques HTML con banners, vídeos, mensajes o recursos destacados.
- Mejora la visibilidad de contenidos clave según el perfil del usuario.
Diseño responsive y adaptable
Boost está diseñado para funcionar perfectamente en móviles y tablets, sin necesidad de configuraciones adicionales.
Esto es especialmente útil para organizaciones con usuarios que acceden desde múltiples dispositivos.

¿Cuándo conviene dar un paso más?
Para muchas organizaciones pequeñas o medianas, las opciones de personalización que ofrece el theme Boost pueden ser suficientes. Pero si deseas que tu Moodle refleje realmente tu marca institucional o respalde un diseño pedagógico distintivo, es hora de personalizar Moodle con un tema hijo Boost.
¿Qué puedes personalizar con un tema hijo Boost?
Al crear un child theme basado en Boost, desbloqueas un nivel completamente nuevo de personalización. No reemplazas el Boost original, sino que lo amplías: conservas lo que ya funciona y modificas solo lo necesario.
A continuación, una comparativa clara entre Boost y un child theme:
Elemento | ¿Con Boost? | ¿Con Tema Hijo Boost? |
---|---|---|
Paleta de colores completa | Parcial | ✅ Editable vía SCSS |
Fuentes externas (Google Fonts) | ❌ | ✅ Sí |
Diseño del pie de página | ❌ | ✅ Totalmente personalizable |
Estilos por rol de usuario | ❌ | ✅ JS/CSS según perfil |
JavaScript personalizado | ❌ | ✅ Integración completa |
Personalización de iconos | ❌ | ✅ Compatible con SVG/FontAwesome |
Nuevos layouts y plantillas | ❌ | ✅ Mustache totalmente habilitado |
Interfaz multilingüe visual | Parcial | ✅ 100% configurable |
Compatibilidad con plugins UI | Limitada | ✅ Mejor integración |
Un child theme no reemplaza Boost, lo hereda y lo amplía, por lo que puedes conservar lo que ya funciona y modificar únicamente lo que necesitas.
¿Y si no tienes un equipo técnico?
No contar con desarrolladores en plantilla no significa que debas resignarte a un diseño genérico. En ese caso, puedes optar por themes comerciales de alta calidad, disponibles en plataformas como ThemeForest – Moodle.
Estos temas profesionales suelen incluir:
- Diseños atractivos y adaptativos
- Compatibilidad móvil garantizada
- Paneles de configuración ampliados
- Soporte técnico y actualizaciones regulares
🔎 Eso sí: incluso si optas por un tema comercial, personalizar tu Moodle con la identidad visual mínima de tu organización —colores, logotipo y tipografía— sigue siendo imprescindible.
Porque una plataforma coherente con tu imagen refuerza la confianza, mejora la experiencia del usuario y comunica profesionalidad desde el primer momento.
Conclusión: Elevar tu Moodle sin comprometer tu identidad
Dar el paso hacia un diseño más personalizado no es un lujo: es una decisión estratégica que impacta directamente en la usabilidad, la imagen institucional y la eficacia formativa.
Tanto si decides desarrollar internamente como si optas por una solución comercial, recuerda que el objetivo no es solo tener un Moodle más bonito, sino uno que comunique, motive y represente fielmente a tu organización.
Y en ese camino, personalizar Moodle con un tema hijo Boost es la mejor forma de lograrlo con control, escalabilidad y alineación técnica.
No se trata de rediseñar por rediseñar. Se trata de convertir tu Moodle en una experiencia formativa potente, intuitiva y profundamente conectada con quienes lo usan cada día.
Creando tu Tema Hijo de Boost: Guía Paso a Paso
Si tu objetivo es transformar una instalación básica de Moodle en una plataforma visualmente coherente con tu identidad institucional, funcional y preparada para escalar, este es el punto de partida. Adoptar un enfoque técnico sólido y estructurado te permitirá personalizar Moodle con un tema hijo Boost de manera profesional, segura y sostenible.
Aquí te explico cómo hacerlo, paso a paso.
Paso 1: Prepara tu entorno de desarrollo
⚠️ Regla de oro: Nunca desarrolles directamente en producción.
Antes de tocar una sola línea de código, configura un entorno de desarrollo o staging que reproduzca fielmente tu instalación real. Esto te permitirá experimentar sin poner en riesgo el entorno activo.
✅ Requisitos mínimos
- Una instancia de Moodle de pruebas (misma versión que la de producción)
- Copia exacta de los plugins, temas y configuraciones
- Duplicado de cursos y usuarios (anonimizados si es necesario)
🧰 Herramientas recomendadas
- Visual Studio Code (o el editor que prefieras)
- Git para control de versiones y trabajo colaborativo
- SFTP/FTP (como FileZilla o Cyberduck), si no dispones de acceso por SSH
- Servidor local o VPS, preferiblemente con entorno LAMP, para realizar validaciones antes de desplegar
📁 Paso 2: Crea el Directorio de tu Tema Hijo
Una vez tengas listo tu entorno de desarrollo, es hora de estructurar correctamente tu child theme para que Moodle lo reconozca y funcione sin conflictos.
Para comenzar a personalizar Moodle con un tema hijo Boost, dirígete a la siguiente ubicación de tu instalación moodle/theme .
Dentro de esta carpeta, verás el directorio boost/
, que es el tema base de Moodle. Crea allí un nuevo directorio para tu child theme con un nombre representativo, claro y en minúsculas. Por ejemplo: micampus
.
moodle/
└── theme/
├── boost/
└── micampus/ ← Tu child theme va aquí
🧠 Buenas prácticas para nombrar tu tema hijo Boost
Un nombre claro facilitará la organización, el mantenimiento y la documentación futura.
✅ Recomendado:
micampus
edf_theme
corporatelearning
❌ Evita:
- Nombres con espacios, acentos o mayúsculas
- Ejemplos incorrectos:
Mi Campus
,educación_theme
,FormaciónAvanzada
Recuerda: el nombre del directorio será parte del identificador del plugin, que se verá así: theme_micampus .
Este identificador se usará en los archivos clave de configuración, y también en el panel de administración de Moodle.
📄 Paso 3: Archivos Esenciales de un Tema Hijo en Moodle 4.5
Para que tu tema hijo sea reconocido como un plugin válido en Moodle, necesitas incluir un conjunto mínimo de archivos. Estos ficheros configuran la base técnica sobre la que podrás personalizar Moodle con un tema hijo Boost de forma segura y conforme a las buenas prácticas del sistema.
Estos archivos son necesarios para que Moodle reconozca tu theme como un plugin válido:
✅ Archivos obligatorios
config.php
Este archivo define cómo hereda tu tema hijo las funcionalidades del tema Boost y especifica su comportamiento dentro del ecosistema Moodle.
📁 Ruta:theme/micampus/config.php
<?php
// Evita el acceso directo al script si no está cargado desde el núcleo de Moodle.
defined('MOODLE_INTERNAL') || die();
// Nombre del tema: debe coincidir con el nombre del directorio.
$THEME->name = 'micampus';
// Tema del que hereda funcionalidades y estilos (Boost es el tema base moderno de Moodle).
$THEME->parents = ['boost'];
// Desactiva la caché de tema (solo recomendable en desarrollo para ver cambios al instante).
$THEME->cacheable = false;
// No se utilizan hojas de estilo CSS tradicionales.
$THEME->sheets = [];
$THEME->editor_sheets = [];
// Función que devuelve el contenido SCSS principal del tema (colores, variables, estilos).
$THEME->scss = function($theme) {
return theme_micampus_get_main_scss_content($theme);
};
// Callback que permite añadir SCSS adicional desde la administración del sitio.
$THEME->extrascsscallback = 'theme_micampus_get_extra_scss';
// Habilita la posibilidad de sobrescribir renderizadores de Moodle en el tema.
$THEME->rendererfactory = 'theme_overridden_renderer_factory';
// Definición de los layouts del tema para diferentes tipos de página.
// Todas las vistas usan la plantilla "columns2.php" con una región lateral ("side-pre").
$THEME->layouts = [
'base' => [ // Páginas básicas como el login.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
],
'standard' => [ // Páginas estándar del sitio.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
],
'course' => [ // Páginas de cursos.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
],
'frontpage' => [ // Página principal del sitio.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
],
'mycourses' => [ // Listado de cursos del usuario.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
],
'mydashboard' => [ // Escritorio personalizado del usuario.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
],
'admin' => [ // Páginas de administración.
'file' => 'columns2.php',
'regions' => ['side-pre'],
'defaultregion' => 'side-pre',
]
];
// Permite sobrescribir plantillas Mustache de otros componentes.
// En este caso, se sustituye la barra de navegación por una versión personalizada.
$THEME->templates = [
'core/navbar' => 'templates/navbar.mustache'
];
// Desactiva la funcionalidad de "acoplar bloques" (obsoleta en Boost).
$THEME->enable_dock = false;
// El tema aparece en el selector de temas del administrador.
$THEME->hidefromselector = false;
// Si hay errores en el tema hijo, se utiliza automáticamente el tema padre como respaldo.
$THEME->usefallback = true;
2. version.php
(metadatos del plugin)
Define la versión del plugin, el nombre del tema y los requisitos mínimos de Moodle.
📁 Ruta: theme/micampus/version.php
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2025062900;
$plugin->requires = 2022041900; // Moodle 4.0+
$plugin->component = 'theme_micampus';
$plugin->maturity = MATURITY_STABLE;
$plugin->release = '1.0.0';
4. Archivos de idioma mínimos
Para que tu tema sea multilingüe, incluye las carpetas:
lang/en/theme_micampus.php
lang/es/theme_micampus.php
Contenido mínimo sugerido (por idioma):
Español (lang/es/theme_micampus.php
)
<?php
// Cadenas de idioma en español para theme_micampus.
$string['pluginname'] = 'micampus';
$string['configtitle'] = 'Tema micampus';
// Ajustes generales
$string['generalsettings'] = 'Ajustes generales';
$string['brandingheading'] = 'Identidad de marca';
$string['brandingheading_desc'] = 'Configura la identidad visual de tu centro: logotipos, colores de marca y elementos gráficos principales.';
$string['logo'] = 'Logotipo principal';
$string['logodesc'] = 'Logotipo principal que se mostrará en la cabecera del sitio.';
$string['brandlogo'] = 'Logotipo compacto';
$string['brandlogodesc'] = 'Versión compacta del logotipo para móviles o espacios reducidos.';
// Colores
$string['colorscheme'] = 'Paleta de colores';
$string['colorscheme_desc'] = 'Selecciona los colores principales para personalizar tu plataforma y adaptarla a tu identidad de marca.';
$string['primarycolor'] = 'Color principal';
$string['primarycolor_desc'] = 'Color principal utilizado en destacados, botones y elementos importantes.';
$string['secondarycolor'] = 'Color secundario';
$string['secondarycolor_desc'] = 'Color secundario para acentos y otros elementos de la interfaz.';
$string['prefootercolor'] = 'Fondo del pre-footer';
$string['prefootercolor_desc'] = 'Color de fondo de la zona pre-footer (encima del pie de página).';
$string['footercolor'] = 'Fondo del pie de página';
$string['footercolor_desc'] = 'Color de fondo para la zona del pie de página.';
$string['footertextcolor'] = 'Color del texto del pie de página';
$string['footertextcolor_desc'] = 'Color del texto e iconos en el pie de página.';
$string['textcolor'] = 'Color del texto';
$string['textcolor_desc'] = 'Color por defecto para el contenido textual en toda la plataforma.';
$string['headingcolor'] = 'Color de los encabezados';
$string['headingcolor_desc'] = 'Color para todos los encabezados (H1, H2, etc.).';
// Tipografía
$string['typography'] = 'Tipografía';
$string['typography_desc'] = 'Elige las fuentes tipográficas para personalizar la plataforma.';
$string['headingfont'] = 'Fuente para encabezados';
$string['headingfont_desc'] = 'Familia tipográfica utilizada en los encabezados (H1, H2, etc.).';
$string['bodyfont'] = 'Fuente para el cuerpo';
$string['bodyfont_desc'] = 'Familia tipográfica utilizada en los textos generales.';
// Columnas del pie de página
$string['footercolumns'] = 'Columnas del pie de página';
$string['footercolumns_desc'] = 'Edita y gestiona el contenido de cada columna en el pie de página.';
$string['footercol1'] = 'Columna 1 del pie de página';
$string['footercol1_desc'] = 'Contenido HTML para la primera columna del pie de página.';
$string['footercol2'] = 'Columna 2 del pie de página';
$string['footercol2_desc'] = 'Contenido HTML para la segunda columna del pie de página.';
$string['footercol3'] = 'Columna 3 del pie de página';
$string['footercol3_desc'] = 'Contenido HTML para la tercera columna del pie de página.';
$string['footercol4'] = 'Columna 4 del pie de página';
$string['footercol4_desc'] = 'Contenido HTML para la cuarta columna del pie de página.';
$string['footertext'] = 'Tema micampus para Moodle.';
// Enlaces sociales
$string['sociallinks'] = 'Enlaces a redes sociales';
$string['sociallinks_desc'] = 'Configura los enlaces a tus perfiles en redes sociales. Se mostrarán en la zona de pre-footer.';
$string['socialicon'] = 'Icono de red social #{$a}';
$string['socialicon_desc'] = 'Selecciona el icono para el enlace social #{$a}.';
$string['socialurl'] = 'URL de la red social #{$a}';
$string['socialurl_desc'] = 'Introduce la URL para la red social #{$a}.';
$string['followus'] = 'Síguenos';
$string['nosociallinks'] = 'No hay redes sociales configuradas todavía.';
Inglés (lang/en/theme_micampus.php
)
<?php
// English language strings for theme_micampus.
$string['pluginname'] = 'micampus';
$string['configtitle'] = 'micampus Theme';
// General settings
$string['generalsettings'] = 'General settings';
$string['brandingheading'] = 'Branding';
$string['brandingheading_desc'] = 'Configure your brand identity: logos, main brand colors, and visual elements.';
$string['logo'] = 'Logo';
$string['logodesc'] = 'The main logo displayed in the header.';
$string['brandlogo'] = 'Brand logo (compact)';
$string['brandlogodesc'] = 'A compact version of the logo for mobile or small spaces.';
// Colors
$string['colorscheme'] = 'Color scheme';
$string['colorscheme_desc'] = 'Choose the primary colors for your site to match your brand identity.';
$string['primarycolor'] = 'Primary color';
$string['primarycolor_desc'] = 'The main color for highlights, buttons, and important elements.';
$string['secondarycolor'] = 'Secondary color';
$string['secondarycolor_desc'] = 'A secondary accent color for additional highlights and UI elements.';
$string['prefootercolor'] = 'Pre-footer background';
$string['prefootercolor_desc'] = 'Background color for the pre-footer section (above the footer).';
$string['footercolor'] = 'Footer background';
$string['footercolor_desc'] = 'Background color for the footer area.';
$string['footertextcolor'] = 'Footer text color';
$string['footertextcolor_desc'] = 'Color of the text and icons in the footer.';
$string['textcolor'] = 'Text color';
$string['textcolor_desc'] = 'Default color for general text throughout the site.';
$string['headingcolor'] = 'Heading color';
$string['headingcolor_desc'] = 'Color for all headings (H1, H2, etc.).';
// Typography
$string['typography'] = 'Typography';
$string['typography_desc'] = 'Choose your preferred fonts for the site.';
$string['headingfont'] = 'Heading font';
$string['headingfont_desc'] = 'Font family used for headings (H1, H2, etc.).';
$string['bodyfont'] = 'Body font';
$string['bodyfont_desc'] = 'Font family used for general body text.';
// Footer columns
$string['footercolumns'] = 'Footer columns';
$string['footercolumns_desc'] = 'Edit and manage the content for each column in the footer.';
$string['footercol1'] = 'Footer column 1';
$string['footercol1_desc'] = 'HTML content for the first footer column.';
$string['footercol2'] = 'Footer column 2';
$string['footercol2_desc'] = 'HTML content for the second footer column.';
$string['footercol3'] = 'Footer column 3';
$string['footercol3_desc'] = 'HTML content for the third footer column.';
$string['footercol4'] = 'Footer column 4';
$string['footercol4_desc'] = 'HTML content for the fourth footer column.';
$string['footertext'] = 'Powered by micampus theme for Moodle.';
// Social links
$string['sociallinks'] = 'Social links';
$string['sociallinks_desc'] = 'Set up links to your social media profiles. These will be shown in the pre-footer section.';
$string['socialicon'] = 'Social icon #{$a}';
$string['socialicon_desc'] = 'Select the icon for social link #{$a}.';
$string['socialurl'] = 'Social link #{$a} URL';
$string['socialurl_desc'] = 'Enter the URL for social network #{$a}.';
$string['followus'] = 'Follow us';
$string['nosociallinks'] = 'No social networks have been configured yet.';
$string['logosettings'] = 'Logo settings';
$string['logosettings_desc'] = 'Configure the logos to be displayed in the header and compact views.';
5. settings.php
(ajustes del theme)
Define la versión del plugin, el nombre del tema y los requisitos mínimos de Moodle.
📁 Ruta: theme/micampus/settings.php
<?php
// Seguridad: evita el acceso directo si no está dentro del contexto de Moodle.
defined('MOODLE_INTERNAL') || die();
if ($ADMIN->fulltree) {
// === INICIO DE LAS PESTAÑAS DE CONFIGURACIÓN ===
$settings = new theme_boost_admin_settingspage_tabs(
'themesettingmicampus',
get_string('configtitle', 'theme_micampus') // Título general de la configuración del tema
);
// =========================================================================
// PESTAÑA 1: GENERAL
// =========================================================================
$page = new admin_settingpage('theme_micampus_general', get_string('generalsettings', 'theme_micampus'));
// --- Sección: Logotipo ---
$page->add(new admin_setting_heading(
'theme_micampus_logos',
get_string('logosettings', 'theme_micampus'),
get_string('logosettings_desc', 'theme_micampus')
));
// Subida del logotipo principal (máximo 1 imagen)
$page->add(new admin_setting_configstoredfile(
'theme_micampus/logo',
get_string('logo', 'theme_micampus'),
get_string('logodesc', 'theme_micampus'),
'logo',
0,
['maxfiles' => 1, 'accepted_types' => ['image']]
));
// --- Sección: Colores del tema ---
$page->add(new admin_setting_heading(
'theme_micampus_colors',
get_string('colorscheme', 'theme_micampus'),
get_string('colorscheme_desc', 'theme_micampus')
));
// Color primario (ej. botones, enlaces activos...)
$page->add(new admin_setting_configcolourpicker(
'theme_micampus/primarycolor',
get_string('primarycolor', 'theme_micampus'),
get_string('primarycolor_desc', 'theme_micampus'),
'#0057B8'
));
// Puedes añadir más selectores de color aquí si lo necesitas...
// --- Sección: Tipografía ---
$page->add(new admin_setting_heading(
'theme_micampus_typography',
get_string('typography', 'theme_micampus'),
get_string('typography_desc', 'theme_micampus')
));
// Lista de fuentes disponibles para encabezados y cuerpo de texto
$googlefonts = [
'Open Sans' => 'Open Sans',
'DM Sans' => 'DM Sans',
'Roboto' => 'Roboto',
'Lato' => 'Lato',
'Oswald' => 'Oswald',
'Montserrat' => 'Montserrat',
'Inter' => 'Inter',
'Raleway' => 'Raleway'
];
// Fuente para títulos
$page->add(new admin_setting_configselect(
'theme_micampus/headingfont',
get_string('headingfont', 'theme_micampus'),
get_string('headingfont_desc', 'theme_micampus'),
'Oswald',
$googlefonts
));
// Fuente para cuerpo de texto
$page->add(new admin_setting_configselect(
'theme_micampus/bodyfont',
get_string('bodyfont', 'theme_micampus'),
get_string('bodyfont_desc', 'theme_micampus'),
'DM Sans',
$googlefonts
));
// Añade esta página a las pestañas de configuración
$settings->add($page);
// =========================================================================
// PESTAÑA 2: FOOTER
// =========================================================================
$page = new admin_settingpage('theme_micampus_footer', get_string('footercolumns', 'theme_micampus'));
// Encabezado y descripción de la sección footer
$page->add(new admin_setting_heading(
'theme_micampus_footer',
get_string('footercolumns', 'theme_micampus'),
get_string('footercolumns_desc', 'theme_micampus')
));
// Campos HTML para el contenido de las 4 columnas del pie de página
for ($i = 1; $i <= 4; $i++) {
$page->add(new admin_setting_confightmleditor(
"theme_micampus/footercol{$i}",
get_string("footercol{$i}", 'theme_micampus'),
get_string("footercol{$i}_desc", 'theme_micampus'),
''
));
}
$settings->add($page);
// =========================================================================
// PESTAÑA 3: REDES SOCIALES
// =========================================================================
$page = new admin_settingpage('theme_micampus_social', get_string('sociallinks', 'theme_micampus'));
// Encabezado para la sección de redes sociales
$page->add(new admin_setting_heading(
'theme_micampus_social',
get_string('sociallinks', 'theme_micampus'),
get_string('sociallinks_desc', 'theme_micampus')
));
// Iconos disponibles (FontAwesome o clases compatibles)
$socialicons = [
'facebook' => 'Facebook',
'x-twitter' => 'X (Twitter)',
'instagram' => 'Instagram',
'linkedin' => 'LinkedIn',
'youtube' => 'YouTube',
'tiktok' => 'TikTok'
];
// Configura hasta 4 redes sociales con su icono y URL asociada
for ($i = 1; $i <= 4; $i++) {
// Selector del icono
$page->add(new admin_setting_configselect(
"theme_micampus/social{$i}icon",
get_string("socialicon", 'theme_micampus', $i),
get_string("socialicon_desc", 'theme_micampus'),
'',
$socialicons
));
// Campo para la URL correspondiente
$page->add(new admin_setting_configtext(
"theme_micampus/social{$i}url",
get_string("socialurl", 'theme_micampus', $i),
get_string("socialurl_desc", 'theme_micampus'),
''
));
}
$settings->add($page);
}
5. core_renderer.php
📁 Ruta: theme/micampus/classes/output/core_renderer.php
Core Renderer — Sobrescribir el Comportamiento de Moodle
Uno de los puntos más potentes de un tema hijo en Moodle es la posibilidad de sobrescribir cómo se renderizan elementos clave de la plataforma: menús, bloques, cabeceras, botones, tablas… Para ello, utilizamos lo que se conoce como un renderer personalizado.
¿Qué es un Renderer en Moodle?
Un renderer (o renderizador) es una clase PHP que define cómo se dibujan ciertos componentes visuales. Moodle separa lógica y presentación mediante estos renderers, y permite sobrescribirlos desde los temas para adaptarlos a tus necesidades visuales o funcionales.
¿Por qué sobrescribir un renderer?
- Para cambiar la estructura HTML generada por Moodle (sin tocar el core).
- Para añadir clases CSS personalizadas a botones, menús, tablas…
- Para insertar elementos adicionales (como iconos, tooltips o envoltorios) sin modificar plantillas Mustache.
- Para mejorar la accesibilidad o adaptar la plataforma a tu diseño institucional.
Activar renderers personalizados en el tema
Ya en tu archivo config.php
del tema hijo, este ajuste habilita la sobreescritura de renderers:
$THEME->rendererfactory = 'theme_overridden_renderer_factory';
Este ajuste le indica a Moodle que, si en tu tema existe una clase que sobrescriba un renderer original, debe usarla en lugar de la que viene por defecto.
Estructura recomendada para sobrescribir renderers
Tu archivo PHP con el renderer debe estar ubicado en: /theme/micampus/classes/output/core_renderer.php
Ejemplo
<?php
namespace theme_micampus\output;
defined('MOODLE_INTERNAL') || die();
use theme_config;
use moodle_url;
use core\navigation\output\primary; // Clase que genera el menú de navegación principal
/**
* Renderer principal del tema Micampus
* Sobrescribe comportamientos clave de Boost para personalizar la barra de navegación,
* el logo, el pie de página y otras secciones comunes.
*/
class core_renderer extends \theme_boost\output\core_renderer {
/** @var \theme_config Configuración del tema cargada dinámicamente */
protected $theme;
/**
* Constructor: carga la configuración del tema Micampus
*/
public function __construct(\moodle_page $page, $target) {
parent::__construct($page, $target);
$this->theme = theme_config::load('micampus');
}
/**
* Renderiza la barra de navegación superior utilizando una plantilla Mustache
*/
public function navbar(): string {
global $CFG, $SITE, $PAGE;
// Inicializa el menú principal de navegación
$primary = new primary($PAGE);
$renderer = $PAGE->get_renderer('core');
$primarymenu = $primary->export_for_template($renderer);
// Construye el contexto que se pasará a la plantilla navbar.mustache
$templatecontext = [
'sitename' => format_string($SITE->fullname),
'wwwroot' => $CFG->wwwroot,
'logo_url' => $this->get_logo_url(),
'search_box' => $this->search_box(),
'user_menu' => $this->user_menu(),
'navbar_plugin_output' => $this->navbar_plugin_output(),
'primarymoremenu' => $primarymenu['moremenu'],
'langmenu' => $this->lang_menu(),
'page' => $this->page,
'isloggedin' => isloggedin(),
'bodyattributes' => $this->body_attributes(),
'primarymenu' => $primarymenu
];
// Renderiza la plantilla personalizada del navbar
return $this->render_from_template('theme_micampus/navbar', $templatecontext);
}
/**
* Devuelve la URL absoluta del logotipo configurado desde el panel de administración del tema
*/
public function get_logo_url($maxwidth = 300, $maxheight = 80) {
if ($this->theme && !empty($this->theme->settings->logo)) {
// Itemid = 0 por convención en la carga del archivo de logo
$url = $this->theme->setting_file_url('logo', 'logo', 0, $maxwidth, $maxheight);
if ($url instanceof \moodle_url) {
$urlstring = $url->out(false);
// Asegura que la URL tiene protocolo http(s)
if (strpos($urlstring, '//') === 0) {
$urlstring = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https:' : 'http:') . $urlstring;
}
error_log('[micampus] Logo URL ok (absolute): ' . $urlstring);
return new \moodle_url($urlstring);
} elseif (is_string($url)) {
error_log('[micampus] Logo URL string detected, converting to moodle_url: ' . $url);
if (strpos($url, '//') === 0) {
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https:' : 'http:') . $url;
}
return new \moodle_url($url);
} else {
error_log('[micampus] Logo URL no válida: ' . print_r($url, true));
}
} else {
error_log('[micampus] No hay logo configurado en los ajustes del tema');
}
// Fallback: usa la función original del tema Boost
$fallback = parent::get_logo_url($maxwidth, $maxheight);
error_log('[micampus] Fallback logo URL: ' . $fallback);
return $fallback;
}
/**
* Añade el contenido del pre-footer y footer tras la región principal
*/
public function standard_after_main_region_html() {
global $PAGE;
// No se aplica en la página de login
if ($PAGE->pagelayout === 'login') {
return '';
}
$output = '';
$output .= $this->render_from_template('theme_micampus/prefooter', $this->get_prefooter_context());
$output .= $this->render_from_template('theme_micampus/footer', $this->get_footer_context());
return $output;
}
/**
* Contexto para la plantilla prefooter.mustache: redes sociales
*/
protected function get_prefooter_context() {
$sociallinks = [];
for ($i = 1; $i <= 4; $i++) {
$icon = get_config('theme_micampus', "social{$i}icon");
$url = get_config('theme_micampus', "social{$i}url");
if ($icon && $url) {
$sociallinks[] = [
'icon' => $icon,
'url' => $url,
'iconlabel' => ucfirst($icon),
];
}
}
return ['sociallinks' => $sociallinks];
}
/**
* Contexto para la plantilla footer.mustache: contenido de columnas
*/
protected function get_footer_context() {
$context = [];
for ($i = 1; $i <= 4; $i++) {
$context["footercol{$i}"] = format_text(
get_config('theme_micampus', "footercol{$i}"),
FORMAT_HTML,
['noclean' => true, 'trusted' => true]
);
}
return $context;
}
}
6. lib.php
– El Cerebro Lógico del Tema
📁 Ruta: theme/micampus/lib.php
Aunque los temas de Moodle son principalmente visuales, también pueden contener funciones PHP auxiliares que completan la personalización.
Este archivo permite inyectar lógica propia del tema, como:
- Generar dinámicamente variables SCSS
- Cargar presets personalizados
- Obtener rutas a logotipos
- Añadir SCSS antes o después del tema base
- Gestionar archivos como logos o imágenes personalizadas
🔍 ¿Por qué es importante lib.php
?
- Porque permite que tu tema sea configurable desde el panel de administración.
- Porque evita tener que tocar SCSS directamente: puedes generar colores, fuentes o reglas según la configuración del administrador.
- Porque ayuda a mantener el código separado, claro y reutilizable.
<?php
// Seguridad: evita el acceso directo si no está dentro del contexto de Moodle.
defined('MOODLE_INTERNAL') || die();
/**
* Devuelve el contenido principal del SCSS del tema.
* Define las variables dinámicas (colores, tipografías) y carga el preset configurado.
*
* @param theme_config $theme
* @return string
*/
function theme_micampus_get_main_scss_content($theme): string {
global $CFG;
// Variables de configuración: se aplican colores y fuentes personalizados
$primary = trim($theme->settings->primarycolor ?? '#2563EB', "\"'");
$secondary = trim($theme->settings->secondarycolor ?? '#22C55E', "\"'");
$prefooter = trim($theme->settings->prefootercolor ?? '#E8F1FF', "\"'");
$footer = trim($theme->settings->footercolor ?? '#18325A', "\"'");
$textcolor = trim($theme->settings->textcolor ?? '#22223B', "\"'");
$headingcolor = trim($theme->settings->headingcolor ?? '#2563EB', "\"'");
$footertextcolor = trim($theme->settings->footertextcolor ?? '#fff', "\"'");
$headingfont = $theme->settings->headingfont ?? 'Oswald';
$bodyfont = $theme->settings->bodyfont ?? 'DM Sans';
// Inyección de variables SCSS personalizadas
$customscss = <<<SCSS
// --- VARIABLES PERSONALIZADAS DEL TEMA MICAMPUS ---
\$primary: {$primary};
\$secondary: {$secondary};
\$prefooter-bg: {$prefooter};
\$footer-bg: {$footer};
\$body-color: {$textcolor};
\$heading-color: {$headingcolor};
\$footer-text-color: {$footertextcolor};
\$font-family-sans-serif: '{$bodyfont}', Arial, sans-serif;
\$headings-font-family: '{$headingfont}', Arial, sans-serif;
SCSS;
// Se determina qué preset SCSS cargar (default.scss u otro)
$presetfile = !empty($theme->settings->preset) ? $theme->settings->preset : 'default.scss';
// Se intenta buscar primero en el tema hijo, luego en Boost
$presetpath = $CFG->dirroot . '/theme/micampus/scss/preset/' . $presetfile;
if (!file_exists($presetpath)) {
$presetpath = $CFG->dirroot . '/theme/boost/scss/preset/' . $presetfile;
}
// Carga del contenido del preset
if (file_exists($presetpath)) {
$preset = file_get_contents($presetpath);
} else {
$preset = '/* PRESET NO ENCONTRADO: ' . $presetfile . ' */';
}
// Log para depuración: qué preset se está usando
error_log("[micampus] Using preset: {$presetpath}");
// Se devuelve la concatenación de variables + contenido del preset
return $customscss . "\n" . $preset;
}
/**
* SCSS adicional que se puede añadir desde los ajustes del tema.
* Por defecto vacío, pero útil si quieres que el administrador pueda añadir código extra.
*/
function theme_micampus_get_extra_scss($theme): string {
return '';
}
/**
* SCSS que se inyecta antes del SCSS de Boost.
* Permite sobrescribir clases antes que el resto del tema padre.
*/
function theme_micampus_get_pre_scss($theme): string {
return <<<SCSS
// Personalización de la barra de navegación
.navbar {
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
height: 70px;
.navbar-brand {
img {
max-height: 40px;
}
}
}
SCSS;
}
/**
* Devuelve CSS ya compilado para mejorar el rendimiento (opcional).
* Puedes usarlo si quieres evitar recompilar SCSS en cada carga.
*/
function theme_micampus_get_precompiled_css($theme): string {
global $CFG;
return file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/default.css');
}
/**
* Devuelve la URL del logo, permitiendo versión oscura si está disponible.
*
* @param bool $dark Si se desea versión en modo oscuro.
* @return moodle_url URL del logotipo
*/
function theme_micampus_get_logo_url($dark = false) {
global $OUTPUT, $CFG;
if ($dark && file_exists($CFG->dirroot . '/theme/micampus/pix/logo_dark.png')) {
return $OUTPUT->image_url('logo_dark', 'theme_micampus');
}
return $OUTPUT->image_url('logo', 'theme_micampus');
}
/**
* Función de ayuda para depuración: muestra el orden de carga de plantillas Mustache.
* Útil para saber si tu override está siendo utilizado.
*/
function theme_micampus_get_template_overrides() {
global $OUTPUT;
$debug = "Template search order for navbar:\n";
$templates = $OUTPUT->get_template_names('core/navbar');
foreach ($templates as $template) {
$debug .= "- $template\n";
}
error_log($debug);
return [];
}
/**
* Controla el acceso a archivos personalizados del tema como logos subidos.
* Necesario para que Moodle sirva correctamente los archivos de configuración.
*
* @param object $course
* @param object $cm
* @param context $context
* @param string $filearea
* @param array $args
* @param bool $forcedownload
* @param array $options
*/
function theme_micampus_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = []) {
global $CFG;
// Solo permitimos acceder a los logos configurados desde el tema (contexto de sistema)
if ($context->contextlevel == CONTEXT_SYSTEM && in_array($filearea, ['logo', 'brandlogo'])) {
$fs = get_file_storage();
$itemid = 0; // Itemid fijo
$filename = array_pop($args);
$filepath = '/';
if (!empty($args)) {
$filepath .= implode('/', $args) . '/';
}
$file = $fs->get_file($context->id, 'theme_micampus', $filearea, $itemid, $filepath, $filename);
if (!$file || $file->is_directory()) {
send_file_not_found();
}
send_stored_file($file, 0, 0, $forcedownload, $options);
exit;
}
// Si no es válido, se rechaza la solicitud
send_file_not_found();
}
Este archivo hace que tu tema responda a la configuración desde el panel de administración y genera dinámicamente los estilos SCSS según los colores y tipografías definidos.
7. Archivos SCSS – Personalización Visual Avanzada
Una de las mayores ventajas de trabajar con un tema hijo de Boost en Moodle es la capacidad de personalizar visualmente la plataforma utilizando SCSS (Sassy CSS). En lugar de modificar directamente el CSS generado, puedes usar variables, estructuras modulares y lógica organizada para mantener tu código limpio, escalable y potente.
En nuestro caso vamos a utilizar un par de ficheros SCSS para inyectar nuestros cambios de diseño.
theme/micampus/
├── scss/
│ ├── preset/
│ │ └── default.scss
│ └── post.scss
Archivo theme/micampus/scss/preset/default.scss
El archivo preset/default.scss
es el núcleo de los estilos de tu tema hijo. Moodle lo utiliza para compilar todos los estilos SCSS a CSS. En este archivo defines el orden de carga de variables, Bootstrap, FontAwesome, Moodle y tus propios estilos.
// Import pre.scss (tu propio SCSS, antes de Bootstrap)
@import "pre";
// Bootstrap variables
$white: #fff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
$gray-400: #ced4da !default;
$gray-500: #8f959e !default;
$gray-600: #6a737b !default;
$gray-700: #495057 !default;
$gray-800: #343a40 !default;
$gray-900: #1d2125 !default;
$black: #000 !default;
$blue: #0f6cbf !default;
$indigo: #6610f2 !default;
$purple: #613d7c !default;
$pink: #db1a74 !default;
$red: #ca3120 !default;
$orange: #f0ad4e !default;
$yellow: #ff7518 !default;
$green: #357a32 !default;
$teal: #20c997 !default;
$cyan: #008196 !default;
$primary: $blue !default;
$success: $green !default;
$info: $cyan !default;
$warning: $orange !default;
$danger: $red !default;
$secondary: $gray-400 !default;
$info-outline: #1f7e9a;
$warning-outline: #a6670e;
// Tables
$table-accent-bg: rgba($black, .03) !default;
// Options
$enable-responsive-font-sizes: true !default;
// Body
$body-color: $gray-900 !default;
// Fonts
$font-size-base: 0.9375rem !default;
$rfs-base-font-size: 0.9rem !default;
$headings-font-weight: 700 !default;
// Navbar
$navbar-dark-hover-color: rgba($white, 1) !default;
$navbar-light-color: rgba($black, 0.6) !default;
$navbar-light-hover-color: rgba($black, .9) !default;
// Breadcrumbs
$breadcrumb-padding-y: .5rem !default;
$breadcrumb-padding-x: 0 !default;
$breadcrumb-item-padding: .5rem !default;
$breadcrumb-margin-bottom: 0 !default;
$breadcrumb-bg: transparent !default;
$breadcrumb-divider: "/" !default;
$breadcrumb-divider-rtl: "/" !default;
// Alerts
$alert-border-width: 0 !default;
$card-group-margin: .25rem;
// Toasts
$toast-color: $white !default;
$toast-background-color: rgba($gray-900, .95) !default;
$toast-header-color: $gray-100 !default;
$toast-header-background-color: rgba($white, .1) !default;
// Custom control size
$custom-control-indicator-size: 1.25rem;
$input-btn-focus-color: rgba($primary, .75) !default;
$input-border-color: $gray-500 !default;
$dropdown-link-hover-color: $white;
$dropdown-link-hover-bg: $primary;
$popover-max-width: 300px !default;
$border-radius: .5rem !default;
$border-radius-lg: .6rem !default;
// stylelint-disable
$theme-colors: () !default;
$theme-colors: map-merge((
primary: $primary,
secondary: $secondary,
success: $success,
info: $info,
warning: $warning,
danger: $danger,
), $theme-colors);
// stylelint-enable
$spacer: 1rem !default;
$spacers: (
0: 0,
1: ($spacer * .25),
2: ($spacer * .5),
3: $spacer,
4: ($spacer * 1.5),
5: ($spacer * 2),
6: ($spacer * 3)
) !default;
// Import FontAwesome.
@import "fontawesome";
// Import All of Bootstrap
@import "bootstrap";
// Import Core moodle CSS
@import "moodle";
// Preset CSS
body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.navbar {
box-shadow: 0 2px 4px rgba(0, 0, 0, .08);
}
// Rounded user pictures
.userpicture {
border-radius: 50%;
}
// Reset the default styling back to the bootstrap defaults for
// the secondary outline button because gray-200 is much too light
// for an outline button.
.btn-outline-secondary {
@include button-outline-variant($gray-600);
border-color: $gray-600;
}
.btn-outline-info {
@include button-outline-variant($info-outline);
}
.btn-outline-warning {
@include button-outline-variant($warning-outline);
}
// Import post.scss (tu propio SCSS, después de todo lo demás)
@import "post";
Archivo theme/micampus/scss/post.scss
En este archivo post.scss
se incluyen los estilos personalizados del prefooter y footer del tema micampus
. Aquí es donde tu diseño cobra vida, con colores institucionales, transiciones suaves y un comportamiento visual consistente y profesional.
// --- Prefooter (zona superior al footer) ---
.bg-prefooter {
background: $prefooter-bg !important;
color: $heading-color !important;
}
.bg-prefooter h5,
.bg-prefooter .fw-bold {
color: $heading-color !important;
}
// Enlaces e iconos sociales en prefooter
.bg-prefooter a,
.bg-prefooter i.fa-brands {
color: $heading-color !important;
text-decoration: none !important;
position: relative;
display: inline-block;
transition: color 0.22s cubic-bezier(.39,.58,.57,1), transform 0.18s cubic-bezier(.39,.58,.57,1);
}
.bg-prefooter a::after {
content: "";
display: block;
position: absolute;
left: 50%;
bottom: 0.13em;
width: 0;
height: 2px;
background: $footer-bg;
transition: width 0.2s cubic-bezier(.39,.58,.57,1), left 0.2s cubic-bezier(.39,.58,.57,1);
border-radius: 2px;
pointer-events: none;
}
.bg-prefooter a:hover,
.bg-prefooter a:focus,
.bg-prefooter i.fa-brands:hover,
.bg-prefooter i.fa-brands:focus {
color: $footer-bg !important;
transform: scale(1.07);
}
.bg-prefooter a:hover::after,
.bg-prefooter a:focus::after {
width: 100%;
left: 0;
}
.bg-prefooter a:active,
.bg-prefooter i.fa-brands:active {
color: $primary !important;
transform: scale(0.97);
}
// Extra para iconos sociales
.bg-prefooter .fa-brands {
transition: color 0.2s, transform 0.18s;
}
.bg-prefooter a:hover .fa-brands,
.bg-prefooter a:focus .fa-brands {
color: $footer-bg !important;
transform: scale(1.15) rotate(-7deg);
}
// --- Footer principal ---
.bg-footer {
background: $footer-bg !important;
color: $footer-text-color !important;
}
.bg-footer a {
color: $footer-text-color !important;
text-decoration: none !important;
position: relative;
display: inline-block;
transition: color 0.22s cubic-bezier(.39,.58,.57,1), transform 0.18s cubic-bezier(.39,.58,.57,1);
}
.bg-footer a::after {
content: "";
display: block;
position: absolute;
left: 50%;
bottom: 0.13em;
width: 0;
height: 2px;
background: $secondary;
transition: width 0.2s cubic-bezier(.39,.58,.57,1), left 0.2s cubic-bezier(.39,.58,.57,1);
border-radius: 2px;
pointer-events: none;
}
.bg-footer a:hover,
.bg-footer a:focus {
color: $secondary !important;
transform: scale(1.07);
}
.bg-footer a:hover::after,
.bg-footer a:focus::after {
width: 100%;
left: 0;
}
.bg-footer a:active {
color: $primary !important;
transform: scale(0.97);
}
// Iconos FontAwesome en el footer
.bg-footer .fa-brands {
transition: color 0.2s, transform 0.18s;
}
.bg-footer a:hover .fa-brands,
.bg-footer a:focus .fa-brands {
color: $secondary !important;
transform: scale(1.15) rotate(-7deg);
}
// Texto destacado, pequeños, muted, imágenes
.bg-footer strong,
.bg-footer b {
color: $footer-text-color !important;
}
.bg-footer .text-muted,
.bg-footer .small {
color: $footer-text-color !important;
}
.bg-footer img {
filter: none;
}
8. Templates Mustache – Separar el Diseño del Código
En Moodle, los temas modernos como Boost y sus hijos utilizan Mustache como motor de plantillas para estructurar visualmente los bloques, cabeceras, menús y pies de página. Estas plantillas permiten personalizar el HTML sin escribir PHP directamente, respetando el principio de separación entre lógica y presentación.
📄 theme/micampus/templates/navbar.mustache
— Cabecera y navegación principal
Se renderiza a través del método core_renderer::navbar()
y define la cabecera completa del sitio.
<!-- Barra de navegación principal fija -->
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-white shadow-sm"
aria-label="{{#str}}sitemenubar, admin{{/str}}">
<div class="container-fluid">
<!-- Botón hamburguesa visible solo en móviles para abrir el menú lateral -->
<button class="navbar-toggler px-2 border-0 me-2" type="button"
data-toggler="drawers" data-action="toggle"
data-target="theme_boost-drawers-primary">
<span class="navbar-toggler-icon"></span>
<span class="sr-only">{{#str}}sidepanel, core{{/str}}</span>
</button>
<!-- Logo o nombre del sitio -->
<!-- Primero intentamos cargar el logotipo desde el renderizador -->
{{{ output.get_logo_url }}}
<!-- Enlace al inicio (logotipo o texto según configuración) -->
<a href="{{{ config.homeurl }}}" class="navbar-brand d-flex align-items-center me-4">
<!-- Si hay logo configurado, lo mostramos -->
{{# output.get_logo_url }}
<img src="{{ output.get_logo_url }}"
alt="{{ sitename }}"
class="logo"
style="max-height: 40px;">
{{/ output.get_logo_url }}
<!-- Si no hay logo, mostramos el nombre del sitio -->
{{^ output.get_logo_url }}
<span class="ms-2 fs-5 fw-bold">{{{ sitename }}}</span>
{{/ output.get_logo_url }}
</a>
<!-- Menú principal de navegación -->
{{# primarymoremenu }}
<div class="collapse navbar-collapse">
<!-- Parcial oficial de Moodle que genera el menú principal -->
{{> core/moremenu }}
</div>
{{/ primarymoremenu }}
<!-- Lado derecho de la barra de navegación: utilidades -->
<div class="d-flex align-items-center ms-auto gap-3">
<!-- Caja de búsqueda (solo visible en pantallas grandes) -->
{{# output.search_box }}
<div class="d-none d-lg-block">
{{{ output.search_box }}}
</div>
{{/ output.search_box }}
<!-- Selector de idioma (visible solo en escritorio) -->
{{# langmenu }}
<div class="d-none d-lg-block">
{{> theme_boost/language_menu }}
</div>
{{/ langmenu }}
<!-- Espacio para plugins que inyectan contenido en la navbar -->
{{{ output.navbar_plugin_output }}}
<!-- Menú de usuario (nombre, foto, logout, etc.) -->
<div class="usermenu-container d-flex align-items-center" data-region="usermenu">
{{# usermenu }}
{{> core/user_menu }}
{{/ usermenu }}
</div>
<!-- Botón para activar/desactivar el modo edición -->
{{{ output.edit_switch }}}
</div>
</div>
</nav>
<!-- Menú lateral móvil (drawer) que se muestra con el botón hamburguesa -->
{{> theme_boost/primary-drawer-mobile }}
📄 theme/micampus/templates/prefooter.mustache
— Redes Sociales con Estilo
El prefooter es una zona visual ubicada justo encima del pie de página. En el tema micampus
, se utiliza para mostrar los iconos de redes sociales configurados por el administrador, con estilo personalizado y diseño responsive.
{{! Sección de redes sociales en el prefooter }}
<div class="bg-prefooter mt-3 py-4"
role="region"
aria-label="{{#str}} followus, theme_micampus {{/str}}">
<div class="container text-center">
<!-- Título de la sección -->
<h5 class="fw-bold mb-3">
{{#str}} followus, theme_micampus {{/str}}
</h5>
<!-- Contenedor de iconos con diseño flexible y centrado -->
<div class="d-flex justify-content-center flex-wrap gap-3 mt-3">
<!-- Bucle para recorrer los enlaces configurados -->
{{#sociallinks}}
<div class="d-inline-block mx-2 mb-2">
<a href="{{url}}"
class="fs-3 d-inline-flex align-items-center justify-content-center rounded-circle border"
target="_blank"
rel="noopener noreferrer"
style="width:56px; height:56px;"
aria-label="{{iconlabel}}">
<!-- Icono de red social (ej: fa-facebook) -->
<i class="fa-brands fa-{{icon}}"></i>
</a>
</div>
{{/sociallinks}}
<!-- Si no hay redes configuradas -->
{{^sociallinks}}
<span>{{#str}} nosociallinks, theme_micampus {{/str}}</span>
{{/sociallinks}}
</div>
</div>
</div>
📄 theme/micampus/templates/footer.mustache
— Un Pie de Página Modular y Personalizadle
La plantilla footer.mustache
define el pie de página principal de tu tema hijo micampus
. Es totalmente configurable desde la administración del sitio gracias a los campos footercol1
a footercol4
que definiste en settings.php
.
<!-- Pie de página principal -->
<footer id="page-footer" class="bg-footer text-dark py-4 border-top">
<div class="container">
<!-- Cuatro columnas de contenido configurables desde el panel de administración -->
<div class="row">
<div class="col-md-3">
{{{ footercol1 }}}
</div>
<div class="col-md-3">
{{{ footercol2 }}}
</div>
<div class="col-md-3">
{{{ footercol3 }}}
</div>
<div class="col-md-3">
{{{ footercol4 }}}
</div>
</div>
<!-- Línea inferior con texto institucional o mensaje personalizado -->
<div class="text-center mt-4 small text-muted">
{{# str }} footertext, theme_micampus {{/ str }}
</div>
</div>
</footer>
Paso 5: Activar tu Tema Hijo en Moodle
Una vez que has creado correctamente la estructura de archivos de tu child theme, es momento de activarlo dentro de Moodle. Este proceso es rápido, pero fundamental para validar que todo está funcionando como debe.
🧭 Pasos para activar tu tema hijo Boost
- Accede como administrador a tu entorno de desarrollo de Moodle.
- Dirígete a:
Administración del sitio > Notificaciones
Moodle escaneará automáticamente la carpetatheme/
y detectará el nuevo tema hijo (por ejemplo:theme_mi_campus
). - Si Moodle muestra un aviso, haz clic en:
«Actualizar base de datos de Moodle ahora»
Esto aplicará los cambios y registrará tu tema como un plugin válido. - Luego, ve a:
Administración del sitio > Apariencia > Temas > Selector de temas
- En el bloque «Tema predeterminado», selecciona tu nuevo tema (
Mi Campus
) y pulsa en:
«Usar tema»


🎉 ¡Listo! Tu plataforma ya está utilizando tu tema hijo personalizado basado en Boost. A partir de este punto, puedes comenzar a aplicar ajustes visuales, SCSS, plantillas Mustache y todo lo necesario para personalizar Moodle con un tema hijo Boost de forma coherente con tu identidad institucional.


❓ ¿Por Qué el Tema Aún Se Ve como Boost?
Si al activar tu nuevo tema hijo ves que tu Moodle sigue luciendo igual que antes, no te preocupes: es completamente normal.
Un child theme hereda por completo el diseño visual del tema padre —en este caso, Boost— hasta que tú le indiques lo contrario. Esto significa que aunque hayas activado correctamente tu plugin, el aspecto visual no cambiará automáticamente… aún.
🧱 Esto es una ventaja, no un error
Esta herencia es, de hecho, una de las principales fortalezas al personalizar Moodle con un tema hijo Boost:
- ✅ Te asegura compatibilidad total con Moodle desde el primer minuto
- ✅ Puedes aplicar cambios progresivos sin romper nada
- ✅ Mantienes la estabilidad y estructura probada de Boost mientras personalizas
🎨 ¿Qué puedes cambiar desde ahora?
Ya puedes comenzar a aplicar tus propias personalizaciones visuales y estructurales:
- Modificar los colores mediante SCSS
- Cambiar tipografías, menús y botones
- Ajustar el layout general de las páginas
- Crear componentes exclusivos o adaptados a tus usuarios
- Aplicar condicionales visuales según rol, idioma o contexto
A partir de aquí, tu child theme se convierte en un lienzo listo para reflejar tu identidad institucional de forma moderna, escalable y profesional.
Personalizaciones Avanzadas: Llevando la Experiencia al Siguiente Nivel
Ahora que tu child theme está activo, podemos sumergirnos en la personalización profunda que transformará tu Moodle.
1. Identidad Visual: Logotipos, Favicon y Más Allá
- Ubicación: Crea una carpeta
pix
dentro de tu child theme (mi_campus_personalizado/pix/
). - Archivos requeridos: Sube tu logotipo (ej.
logo.png
) y tu favicon (ej.favicon.ico
). - Configuración: Moodle Boost permite configurar estos elementos desde:
Administración del sitio > Apariencia > Temas > Boost
- O desde tu propio panel de ajustes si has creado una página de configuración personalizada.
- Consejo extra: Usa CSS o Mustache para cambiar el logo según contexto (móvil, curso, evento, etc.).
2. Personalización Avanzada con SCSS: Colores y Tipografías
- Estructura:
- Carpeta:
mi_campus_personalizado/scss/
- Archivo:
custom.scss
- Carpeta:
- Variables principales (ejemplo):
@import "theme/boost/scss/variables";
$primary: #0056b3;
$secondary: #6c757d;
$success: #28a745;
$info: #17a2b8;
$body-bg: #ffffff;
$font-family-sans-serif: "Open Sans", sans-serif;
$font-family-serif: "Georgia", serif;
body {
background-color: $body-bg;
font-family: $font-family-sans-serif;
color: #333;
}
.btn-primary {
background-color: $primary;
border-color: darken($primary, 5%);
&:hover {
background-color: darken($primary, 10%);
border-color: darken($primary, 15%);
}
}
Compilar cambios: Administración del sitio > Apariencia > Selector de temas > Borrar cachés de temas
3. Integración de tipografías o fuentes externas
- Google Fonts:
- En
custom.scss
:@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');
- En
- Fuentes locales:
- Carpeta:
fonts/
- Referencia en SCSS:
- Carpeta:
@font-face {
font-family: 'Open Sans';
src: url('../fonts/OpenSans-Regular.ttf') format('truetype');
}
4. Optimización del Menú de Navegación
Ubicación: Administración del sitio > Apariencia > Temas > Boost > Menú personalizado
Ejemplo de menú:
Inicio|/
Nuestro Campus|/page/view.php?id=123
- Admisiones|/course/admission.php
- Vida Estudiantil|/mod/forum/view.php?id=456
Cursos|/course/index.php
- Grados|/course/category.php?id=1
-- Ingeniería|/course/category.php?id=2
-- Ciencias|/course/category.php?id=3
- Posgrados|/course/category.php?id=4
Biblioteca Virtual|https://biblioteca.tuedu.com/
Contacto|/contact/
5. Personalizando el Pie de Página (Footer)
- Ubicación original:
theme/boost/templates/footer.mustache
- Copiar a:
theme/mi_campus_personalizado/templates/footer.mustache
- Editar con contenido personalizado:
<div id="page-footer" class="bg-primary text-white py-4 mt-5">
<div class="container-fluid">
<div class="row">
<div class="col-md-4 text-center text-md-start mb-3 mb-md-0">
<h5 class="text-white">Contacto</h5>
<p>Dirección: Calle Ficticia, 123<br>
Ciudad, Código Postal, País<br>
Teléfono: +34 123 456 789<br>
Email: info@tucampus.edu</p>
</div>
<div class="col-md-4 text-center mb-3 mb-md-0">
<h5 class="text-white">Enlaces Rápidos</h5>
<ul class="list-unstyled">
<li><a href="/politica-privacidad" class="text-white text-decoration-none">Política de Privacidad</a></li>
<li><a href="/terminos-servicio" class="text-white text-decoration-none">Términos de Servicio</a></li>
<li><a href="/preguntas-frecuentes" class="text-white text-decoration-none">Preguntas Frecuentes</a></li>
</ul>
</div>
<div class="col-md-4 text-center text-md-end">
<h5 class="text-white">Síguenos en Redes Sociales</h5>
<div class="social-icons mt-3">
<a href="https://facebook.com/tucampus" class="text-white mx-2"><i class="fa fa-facebook-f"></i></a>
<a href="https://twitter.com/tucampus" class="text-white mx-2"><i class="fa fa-twitter"></i></a>
<a href="https://linkedin.com/school/tucampus" class="text-white mx-2"><i class="fa fa-linkedin-in"></i></a>
<a href="https://instagram.com/tucampus" class="text-white mx-2"><i class="fa fa-instagram"></i></a>
<a href="https://youtube.com/tucampus" class="text-white mx-2"><i class="fa fa-youtube"></i></a>
</div>
<p class="mt-3">© {{ time_year }} {{ config.sitename }}
</p>
</div>
</div>
</div>
</div>
{{{ output.page_footer_menu }}}
{{{ output.standard_footer_html }}}
{{{ output.standard_end_of_body_html }}}
- Recargar cambios: Borrar la caché de temas.
Este enfoque te ofrece una personalización profunda y visualmente coherente con tu institución educativa.
Integraciones y Extensiones: Ampliando las Capacidades de Moodle
A medida que tu plataforma educativa o corporativa crece, se vuelve esencial que Moodle no funcione de forma aislada. Una personalización efectiva no solo implica adaptar su apariencia visual, sino también extender sus capacidades técnicas para integrarse con otras herramientas del ecosistema digital. De esta forma, personalizar Moodle con un tema hijo Boost se convierte en una estrategia integral que abarca diseño, funcionalidad e interoperabilidad.
1. 🧩 Bloques Personalizados: Información relevante donde importa
Uno de los primeros pasos para adaptar Moodle a las necesidades concretas de tu organización es implementar bloques personalizados, visibles tanto en el dashboard como dentro de los cursos.
🔧 Bloques HTML
Estos bloques son ideales para mostrar:
- Banners institucionales
- Recordatorios y avisos
- Enlaces a recursos clave
Todo sin necesidad de escribir código. Desde el panel de administración puedes insertar texto, imágenes, estilos CSS o pequeños scripts de forma sencilla. Para Laura, esto facilita la comunicación con los estudiantes. Para Carlos, es una herramienta rápida para difundir contenidos internos.
📊 Plugins de bloques dinámicos
Si necesitas funcionalidades más complejas, como mostrar actividades pendientes o KPIs personalizados, puedes crear plugins que se conecten con la base de datos de Moodle. Esto permite mostrar contenido dinámico según el rol del usuario.
- Paneles de productividad
- Próximas entregas o eventos
- Métricas personalizadas
Así, Moodle se convierte en un entorno adaptable y predictivo.
2. 🔗 Integración con Herramientas Externas: Moodle como eje de tu ecosistema digital
Para ofrecer una experiencia formativa completa, es fundamental que Moodle esté conectado con las herramientas clavede tu institución o empresa. Estas integraciones no solo aumentan la eficiencia operativa, sino que consolidan a Moodle como el centro estratégico del aprendizaje digital.
📈 Analítica con Google Analytics, Matomo o Piwik PRO
Conectar Moodle a sistemas de analítica te permite:
- Rastrear el comportamiento de los usuarios
- Analizar tasas de finalización y abandono
- Medir la efectividad de los cursos
La integración puede hacerse fácilmente desde:
- Administración del sitio > Apariencia > Temas > Boost > HTML adicional
- Plugins especializados que ofrecen dashboards dentro del LMS
Tanto Laura como Carlos se benefician: uno puede mejorar la retención estudiantil, el otro justificar el impacto de la formación con métricas concretas.
🧩 Conexión con CRMs, ERPs y otros sistemas corporativos
Cuando personalizas Moodle con un tema hijo Boost y lo integras con sistemas como:
- CRMs (para seguimiento de leads y comunicación personalizada)
- ERPs (para procesos administrativos y académicos)
- Sistemas internos de RRHH, contabilidad o comunicación
…logras una sincronización fluida de datos entre plataformas. Esto se puede implementar mediante:
- Web services (REST, SOAP)
- Conectores específicos
- Intercambio de archivos (CSV, JSON)
La experiencia mejora significativamente: Laura gestiona centralizadamente el ciclo de vida estudiantil, mientras que Carlos accede a una visión 360° del aprendizaje de sus equipos.
🔗 LTI (Learning Tools Interoperability): Conectividad inteligente
LTI es un estándar abierto que permite integrar herramientas externas de aprendizaje directamente dentro de Moodle, como si fueran parte nativa del sistema.
Esto te permite:
- Incluir simuladores, laboratorios virtuales o plataformas editoriales
- Registrar notas automáticamente en el libro de calificaciones
- Evitar múltiples inicios de sesión (SSO integrado)
Un buen ejemplo sería integrar Kahoot, H5P o Turnitin sin complicaciones. Para Carlos, esto significa ofrecer herramientas interactivas sin sobrecargar al equipo técnico. Para Laura, es asegurar experiencias pedagógicas avanzadas y sin fricción.
🎥 Videoconferencias: Clases en tiempo real dentro de Moodle
Integrar Moodle con servicios de videoconferencia como:
- Zoom
- BigBlueButton
- Microsoft Teams
- Google Meet
…permite:
- Agendar sesiones desde el curso
- Registrar asistencia automáticamente
- Enlazar grabaciones o materiales en el mismo espacio de aprendizaje
Esto refuerza la continuidad entre lo presencial y lo digital, algo esencial tanto para la educación formal como para los programas de formación corporativa.
💳 Pasarelas de pago: Monetiza tu oferta formativa
Si gestionas cursos de pago o programas abiertos, puedes integrar Moodle con:
- PayPal
- Stripe
- Redsys (muy usado en España y LATAM)
Beneficios:
- Matriculación automática tras el pago
- Facturación y recibos inmediatos
- Restricción de acceso según estado de pago
Esta funcionalidad permite a Laura profesionalizar su campus virtual y a Carlos escalar la formación para colaboradores externos o socios estratégicos.
Conclusiones Clave
- Moodle no debe ser una isla: Integrarlo con herramientas externas es fundamental para construir una experiencia de formación completa, fluida y eficiente.
- Personalizar Moodle con un tema hijo Boost no solo mejora el diseño visual; también facilita y potencia las integraciones, al mantener una estructura modular, escalable y profesional.
- Tanto si eres Laura, buscando optimizar el aprendizaje con analítica y videoconferencias, como si eres Carlos, alineando formación con KPIs y sistemas corporativos, las integraciones marcan la diferencia.
- Desde bloques personalizados hasta conectores con CRMs, ERPs y herramientas LTI, cada decisión técnica tiene un impacto directo en la motivación, la retención y la percepción de calidad.
Optimización del rendimiento en Moodle: velocidad, eficiencia y UX
Por qué la velocidad importa
Un Moodle que carga en menos de 2 s retiene mejor al alumnado, reduce la tasa de rebote y mejora el SEO. Unos milisegundos de retraso pueden traducirse en abandono de curso o en menor conversión de matrículas.
3 técnicas clave para acelerar tu campus
- Minimiza y concatena CSS/JS
Moodle ya comprime parte de sus recursos, pero tus archivoscustom.scss
ycustom.js
no. Pásalos por CSSNano y UglifyJS antes de subirlos. - Activa caché inteligente
En Administración ▸ Rendimiento ▸ Caché habilita Memcached o Redis. Con ello reduces llamadas a DB y ganas hasta un 30 % de velocidad. - Distribuye estáticos vía CDN
Sirve imágenes y scripts desde un nodo cercano al usuario. En proyectos globales baja la latencia de 200 ms a < 50 ms.
Imágenes ligeras, misma calidad
- Comprime sin perder definición con TinyPNG o ImageOptim.
- Sube formatos modernos: WebP suele reducir un 25 – 35 % el peso frente a PNG/JPG.
- Redimensiona antes de subir; evita cargar un banner 4K si se mostrará a 800 px.
Accesibilidad y Cumplimiento Normativo: Moodle para Todos
WCAG 2.1 desde el primer día
Revisa contraste, navegación por teclado y uso de ARIA antes de publicar tu theme child Boost. Herramientas como WAVE o Lighthouse facilitan el check.
Pruebas mixtas
Automatiza con Lighthouse, pero completa con tests manuales: NVDA, VoiceOver y la clásica navegación solo con tabulador.
Seguridad: Personalización Sin Riesgos
La seguridad debe estar integrada desde el inicio del proyecto de personalización. Cualquier funcionalidad nueva debe evaluarse también desde el punto de vista de la protección de datos y cumplimiento normativo.
Auditorías de seguridad periódicas
Revisa regularmente tu tema hijo, plugins personalizados y configuraciones. Usa herramientas como YARA, PHP Malware Finder o linters específicos para código Moodle.
Políticas de actualización claras
Moodle se actualiza frecuentemente. Asegúrate de que tu tema hijo se mantenga compatible y realiza pruebas en un entorno de staging antes de aplicar cambios en producción.
Código seguro y limpio
Escapa variables, usa las APIs de Moodle y aplica control de accesos por roles (has_capability
). Esto asegura un código robusto, escalable y libre de vulnerabilidades comunes.
Gestión y documentación sostenible
Git como red de seguridad
Rastrear cada cambio en GitHub/GitLab (ramas main / dev / release
) permite revertir errores y colaborar sin pisarse.
Documentación viva
Incluye propósito de cada archivo (config.php
, lib.php
), dependencias, decisiones de diseño y guías funcionales. Usa capturas y diagramas Mermaid para acelerar el onboarding.
En resumen
Optimizar rendimiento, accesibilidad, seguridad y gestión convierte tu tema hijo Boost Moodle en una solución rápida, inclusiva y sostenible que evoluciona al ritmo de tu organización.
Conclusión: Consolidando la Excelencia en tu Ecosistema Educativo
Personalizar Moodle mediante un tema hijo Boost no es simplemente un cambio estético. Es una decisión estratégicaque impacta de lleno en la forma en que tu institución educativa o corporativa transmite sus valores, mejora la experiencia del usuario y garantiza la sostenibilidad tecnológica a medio y largo plazo.
A lo largo de este artículo hemos analizado cómo adaptar Moodle a tu identidad institucional —ya sea en un colegio, universidad, academia o empresa— siguiendo buenas prácticas de diseño, rendimiento, accesibilidad, seguridad y escalabilidad. Desde la personalización visual hasta la optimización del rendimiento y el cumplimiento normativo, cada decisión que tomes cuenta. Cada detalle —colores, menús, tipografía, bloques— comunica algo a tus usuarios.
Si como Laura lideras la transformación digital de un centro educativo, o como Carlos gestionas la formación interna en una organización, este enfoque te permite consolidar un entorno virtual moderno, usable y alineado con tus objetivos. Porque sí: un Moodle bien personalizado enseña mejor, conecta mejor y convierte la tecnología en una verdadera ventaja competitiva.
📚 ¿Y ahora qué? Sigue aprendiendo sobre Moodle
Ahora que ya sabes cómo personalizar tu Moodle, probablemente te estés preguntando cómo llevarlo aún más lejos. La buena noticia es que puedes seguir profundizando con más contenidos técnicos y estratégicos adaptados a tus retos.
👉 Explora todos mis artículos sobre Moodle aquí:
www.andresmartinezsoto.eu/category/moodle
Aquí tienes algunas guías recomendadas para continuar tu evolución:
- 🔄 Mantén tu Moodle al Día: Guía Profesional para una actualización con éxito
Cómo actualizar Moodle sin errores, usando Git y entornos de pruebas. Un paso esencial tras personalizar tu plataforma. - 🐳 Instala Moodle con Docker: Flexibilidad Total y Entornos Reproducibles
Una opción ideal para equipos IT o responsables técnicos que buscan agilidad y portabilidad en sus despliegues. - 🤖 Dale superpoderes a tu Moodle con IA local: Cómo integrar Ollama en tu servidor
Lleva la inteligencia artificial directamente a tu Moodle sin depender de servicios externos. - 🔐 ¡Blindaje Extra para tu Moodle! Guía de Configuración MFA y Consejos de Seguridad Esenciales
Una guía clara y directa para proteger los datos de tu alumnado y equipo. - ⚙️ Automatización Avanzada en Moodle: Cron Jobs, Scripts PHP y Tareas Programadas
Ideal para quienes buscan eficiencia y reducción de tareas repetitivas mediante automatización.
🎯 Tanto si gestionas un campus educativo como si lideras un programa de formación corporativa, estos recursos te ayudarán a consolidar una plataforma más eficiente, segura y alineada con tus metas estratégicas.
¿Quieres estar al tanto de nuevas guías como esta?
Suscríbete al blog o sígueme en LinkedIn para recibir directamente las últimas publicaciones y novedades técnicas sobre Moodle, edTech y automatización.
Gracias por acompañarme hasta aquí.
Tu Moodle puede llegar mucho más lejos… y estoy aquí para ayudarte a lograrlo.
🚀 ¿Listo para poner en marcha tu propia plataforma Moodle?
Si has llegado hasta aquí, probablemente compartes una idea clara: quieres ofrecer formación de calidad y necesitas una plataforma educativa robusta, segura y bien configurada. Moodle es la herramienta perfecta para ello. Pero quizás aún te quedan dudas, te falta tiempo, o prefieres contar con apoyo experto para evitar errores y acelerar el proceso.
💡 ¿Por qué contar con nosotros?
Porque te ayudamos a convertir tu idea en una plataforma Moodle real, lista para enseñar desde el primer día:
- 🔧 Instalamos Moodle desde cero en tu VPS o servidor cloud.
- 🔐 Configuramos Apache, PHP, MySQL/MariaDB, y todo lo necesario para un entorno seguro y optimizado.
- 🎨 Personalizamos el diseño para que tu Moodle refleje tu imagen institucional o corporativa.
- 🧩 Añadimos plugins útiles, integramos herramientas (videoconferencia, pagos, analítica) y ajustamos la plataforma a tus necesidades pedagógicas o de negocio.
- 📚 Te dejamos una plataforma funcional, eficiente y preparada para escalar.
🎯 Nos adaptamos a tu caso:
- Si eres Laura, responsable TIC en una escuela o centro de formación, te ayudamos a que tu Moodle esté alineado con tu modelo pedagógico.
- Si eres Carlos, encargado de formación en una empresa, te acompañamos para que tu Moodle sea parte integral del ecosistema corporativo.
👉 Sin complicaciones, sin tecnicismos innecesarios, y con un acompañamiento real, paso a paso.

📩 ¿Hablamos?
Cuéntanos tu proyecto. ¿Es una escuela? ¿Una universidad? ¿Una empresa? ¿Una academia digital?
Nosotros nos encargamos del resto.
📩 Contáctanos hoy mismo y empecemos juntos a construir una plataforma Moodle a la altura de tus objetivos.