Temas de Color
Chamilo 2.0 utiliza un sistema de temas de color basado en base de datos. Los temas se gestionan a través de la interfaz de administración, se almacenan en la base de datos y se escriben en disco como archivos CSS. Pueden personalizarse por URL de acceso, permitiendo que instalaciones multi-URL tengan identidades visuales diferentes.
Modelo de Datos
Dos entidades impulsan el sistema de temas:
ColorTheme (src/CoreBundle/Entity/ColorTheme.php)
id
int
Clave primaria
title
string
Nombre legible por humanos
slug
string
Generado automáticamente a partir de title (por ejemplo, "Mi Tema" → mi-tema); usado como nombre del directorio en var/themes/
variables
array (JSON)
Mapa de nombre de propiedad CSS personalizada → valor (por ejemplo, {"--color-primary-base": "46 117 163"})
AccessUrlRelColorTheme (src/CoreBundle/Entity/AccessUrlRelColorTheme.php)
Asocia un ColorTheme con un AccessUrl. La bandera booleana active marca qué tema está actualmente activo para esa URL. Solo un tema puede estar activo por URL de acceso a la vez.
Cómo se Almacenan los Temas
Cuando un tema se crea o actualiza a través de la API, ColorThemeStateProcessor genera el archivo CSS y lo escribe en el themes_filesystem de Flysystem (respaldado por var/themes/):
var/themes/
└── {slug}/
└── colors.css ← generado a partir de ColorTheme.variablesEl archivo colors.css generado envuelve todas las variables en un bloque :root:
Los valores son tripletas de canales RGB separadas por espacios (no rgb()), lo que permite a Tailwind componer variantes de opacidad como bg-primary/50 sin configuración adicional.
Precedencia en la Resolución de Temas
ThemeHelper::getVisualTheme() resuelve qué slug de tema aplicar en cualquier página dada, en este orden:
Tema activo para la AccessUrl actual — el registro
AccessUrlRelColorThemeconactive = trueTema seleccionado por el usuario — el tema almacenado en la entidad
User, si la configuración de plataformaprofile.user_selected_themeestá habilitadaTema del curso — la configuración de curso
course_theme, si la configuración de plataformacourse.allow_course_themeestá habilitadaTema de la ruta de aprendizaje — el valor
$lp_theme_cssde la LP, si la configuración de cursoallow_learning_path_themeestá habilitadaVariable de entorno
THEME_FALLBACK— establecida en.envcomoTHEME_FALLBACK='chamilo'Predeterminado —
chamilo(codificado comoThemeHelper::DEFAULT_THEME)
Servicio de Activos
Los activos de tema son servidos por ThemeController (src/CoreBundle/Controller/ThemeController.php) bajo el prefijo /themes.
GET /themes/{name}/{path}
Sirve cualquier activo de tema (CSS, JS, imágenes); recurre al tema chamilo si no se encuentra en el tema solicitado
GET /themes/{slug}/logo/{type}
Sirve el logotipo preferido (header o email), con fallback de SVG a PNG
POST /themes/{slug}/logos
Sube logotipos de encabezado/correo electrónico (SVG y/o PNG)
DELETE /themes/{slug}/logos/{type}
Elimina un logotipo específico
La ruta de activos general (/{name}/{path}) recurre automáticamente al tema predeterminado chamilo cuando falta un archivo en el tema solicitado, por lo que los temas solo necesitan incluir los archivos que realmente sobrescriben.
Cómo se Cargan los Temas en las Plantillas
La plantilla de diseño head.html.twig carga los activos del tema activo mediante funciones de ayuda de Twig:
Las tres funciones de Twig (registradas en ChamiloExtension) resuelven la ruta del activo a través de ThemeHelper, aplicando la misma cadena de fallback que arriba:
theme_asset('path')
URL al activo en el tema resuelto
theme_asset_link_tag('path')
Etiqueta completa <link rel="stylesheet">
theme_asset_script_tag('path')
Etiqueta completa <script src="...">
theme_asset_base64('path')
URI de datos codificado en Base64 del activo
theme_logo('header'|'email')
URL al mejor logotipo disponible
Puntos Finales de la API
La gestión de temas se expone a través de la API REST de API Platform (solo para administradores):
POST
/api/color_themes
Crear un nuevo tema
PUT
/api/color_themes/{id}
Actualizar un tema existente
POST
/api/access_url_rel_color_themes
Asociar/activar un tema para una URL de acceso
GET
/api/access_url_rel_color_themes
Listar asociaciones de temas para la URL de acceso actual
Creación de un Tema Personalizado
El flujo de trabajo estándar es a través de la interfaz de administración (Admin → Temas de Color), que invoca los endpoints de la API mencionados anteriormente. Para crear un tema de manera programática:
POST /api/color_themescon un cuerpo JSON:
Esto guarda la entidad y escribe var/themes/my-theme/colors.css.
POST /api/access_url_rel_color_themespara asociarlo y activarlo para la URL de acceso actual:
Para agregar imágenes personalizadas (logotipo, favicon, fondos), súbelas mediante POST /themes/{slug}/logos o colócalas directamente en var/themes/{slug}/images/.
Referencia de Variables de Color
Todas las variables esperadas por la configuración predeterminada de Tailwind:
--color-primary-base
Color de marca principal
--color-primary-gradient
Punto de gradiente más oscuro para el color principal
--color-primary-button-text
Color del texto en botones principales
--color-primary-button-alternative-text
Color de texto alternativo en botones principales
--color-secondary-base
Color de acento secundario
--color-secondary-gradient
Punto de gradiente para el color secundario
--color-secondary-button-text
Color del texto en botones secundarios
--color-tertiary-base
Color terciario
--color-tertiary-gradient
Punto de gradiente para el color terciario
--color-tertiary-button-text
Color del texto en botones terciarios
--color-success-base
Color para estados de éxito
--color-success-gradient
Punto de gradiente para éxito
--color-success-button-text
Color del texto en botones de éxito
--color-info-base
Color para estados de información
--color-info-gradient
Punto de gradiente para información
--color-info-button-text
Color del texto en botones de información
--color-warning-base
Color para estados de advertencia
--color-warning-gradient
Punto de gradiente para advertencia
--color-warning-button-text
Color del texto en botones de advertencia
--color-danger-base
Color para estados de peligro/error
--color-danger-gradient
Punto de gradiente para peligro
--color-danger-button-text
Color del texto en botones de peligro
--color-form-base
Color de acento para elementos de formulario
Última actualización
¿Te fue útil?