🐦 Hummingbird — tema por defecto de PS 9.x
Actualizado: 2024-12-01
Hummingbird es el tema por defecto de PrestaShop 9.x, sustituyendo a Classic. Usa Bootstrap 5, ES Modules nativos, SCSS con tokens CSS y elimina jQuery como dependencia obligatoria.
#Novedades de Hummingbird vs Classic
| Caracteristica | Classic (PS 8.x) | Hummingbird (PS 9.x) |
|---|---|---|
| Framework CSS | Bootstrap 4 | Bootstrap 5 |
| JavaScript | jQuery obligatorio | Vanilla JS / ES Modules |
| CSS Variables | No | Si (tokens CSS personalizables) |
| SCSS | Partial SCSS | Tokens + componentes modulares |
| Webpack | Webpack 4 | Webpack 5 + ESBuild |
| Twig | Smarty principal | Twig con Smarty en FO legacy |
| Dark mode | No nativo | Soporte via prefers-color-scheme |
| Accesibilidad | Basica | WCAG 2.1 AA objetivo |
#Estructura del tema
Estructura de directorios de Hummingbird
text
themes/hummingbird/
├── assets/
│ ├── css/
│ │ └── theme.css ← CSS compilado
│ ├── js/
│ │ └── theme.js ← JS compilado
│ └── img/
├── config/
│ └── theme.yml ← Configuracion del tema
├── modules/ ← Overrides de modulos
├── templates/
│ ├── catalog/
│ ├── checkout/
│ ├── customer/
│ └── layouts/
│ ├── layout-full-width.tpl
│ └── layout-left-column.tpl
├── _dev/ ← Fuentes SCSS y JS (no incluido en la distribucion)
│ ├── scss/
│ │ ├── _variables.scss
│ │ ├── _tokens.scss ← CSS Custom Properties
│ │ └── components/
│ └── js/
│ └── components/
├── preview.jpg
└── theme.yml
#Bootstrap 5 — cambios en el HTML
| Bootstrap 4 (Classic) | Bootstrap 5 (Hummingbird) |
|---|---|
| data-toggle | data-bs-toggle |
| data-dismiss | data-bs-dismiss |
| data-target | data-bs-target |
| ml-auto / mr-auto | ms-auto / me-auto |
| float-left / right | float-start / float-end |
| text-left / right | text-start / text-end |
| jQuery.modal('show') | new bootstrap.Modal(el).show() |
| no-gutters | g-0 |
| sr-only | visually-hidden |
#SCSS y sistema de tokens CSS
_tokens.scss — personalizar el tema con CSS Custom Properties
scss
// En _dev/scss/_tokens.scss (o en tu child theme)
:root {
// ── Colores ──
--color-primary: #1a73e8;
--color-primary-light: #4a90e8;
--color-secondary: #6c757d;
--color-success: #28a745;
--color-danger: #dc3545;
--color-warning: #ffc107;
// ── Tipografia ──
--font-family-base: 'Inter', system-ui, sans-serif;
--font-size-base: 1rem;
--font-size-sm: 0.875rem;
--font-size-lg: 1.125rem;
--line-height-base: 1.5;
// ── Espaciado ──
--spacer: 1rem;
--spacer-xs: calc(var(--spacer) * .25);
--spacer-sm: calc(var(--spacer) * .5);
--spacer-lg: calc(var(--spacer) * 1.5);
--spacer-xl: calc(var(--spacer) * 3);
// ── Bordes ──
--border-radius: 0.375rem;
--border-radius-lg: 0.5rem;
--border-color: #dee2e6;
}
#JavaScript modular (ES Modules)
Patron de componentes JS en Hummingbird
javascript
// En _dev/js/components/myComponent.js
export default class MyComponent {
constructor(el, options = {}) {
this.el = el;
this.options = {
animationDuration: 300,
...options,
};
this.init();
}
init() {
this.el.addEventListener('click', (e) => this.handleClick(e));
}
handleClick(event) {
event.preventDefault();
// ...
}
}
// En _dev/js/theme.js — punto de entrada
import MyComponent from './components/myComponent';
// Inicializar cuando el DOM esta listo
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('[data-my-component]').forEach(el => {
new MyComponent(el);
});
});
// Exponer en window para compatibilidad con modulos legacy
window.MyTheme = { MyComponent };
#Migracion desde Classic
| Tarea de migracion | Prioridad | Notas |
|---|---|---|
| Cambiar data-toggle por data-bs-* | Alta | Afecta dropdowns, modals, tabs |
| Reemplazar jQuery por Vanilla JS | Media | jQuery sigue disponible pero no es recomendado |
| Actualizar clases de utilidades BS4 a BS5 | Alta | ml-, mr-, float-left, etc. |
| Migrar SCSS a sistema de tokens | Media | Permite personalizacion sin recompilar |
| Probar modulos de terceros | Critica | Muchos modulos usan jQuery y BS4 |
| Actualizar child themes | Alta | Revisar todos los templates extendidos |
| Testar checkout completo | Critica | Bootstrap 5 cambia el HTML del checkout |
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.