🧬 Child Themes — herencia de temas en PrestaShop
Actualizado: 2024-12-01
Un child theme hereda todos los templates, CSS y JS de su tema padre, permitiendote personalizar solo lo que necesitas sin tocar los archivos originales. Cuando el tema padre se actualiza, el child theme mantiene tus personalizaciones.
#Que es un child theme
Estructura de un child theme
bash
themes/
├── classic/ # Tema padre (core de PS)
│ ├── theme.yml
│ ├── assets/
│ └── templates/
└── mytheme/ # Child theme (tu personalizacion)
├── theme.yml # Con parent: classic
├── assets/
│ └── css/
│ └── custom.css # Solo tus estilos extra
└── templates/
└── catalog/
└── product.tpl # Solo los templates que sobreescribes
#Configurar theme.yml
themes/mytheme/theme.yml — declarar el tema padre
yaml
name: mytheme
display_name: Mi Tema Personalizado
version: 1.0.0
author:
name: gmartos.es
url: https://gmartos.es
# ── CLAVE: declarar el tema padre ──
parent: classic # nombre del directorio del tema padre
meta:
compatibility:
from: 8.0.0
to: ~
available_layouts:
layout-full-width:
name: Full width
description: Full width layout
layout-left-column:
name: Left column
description: Left column layout
global_settings:
# Solo los assets EXTRA (los del padre se heredan)
stylesheets:
- id: mytheme-custom
path: assets/css/custom.css
media: all
priority: 100 # Despues del CSS del padre
#Sobreescribir templates
Para sobreescribir un template del padre, crea el mismo archivo en tu child theme. PrestaShop busca los templates primero en el child, luego en el padre.
Sobreescribir templates especificos del padre
bash
# Ejemplo: personalizar la ficha de producto
# Copia el template del padre:
cp themes/classic/templates/catalog/product.tpl themes/mytheme/templates/catalog/product.tpl
# Edita solo lo que necesitas en themes/mytheme/templates/catalog/product.tpl
# El resto se hereda del padre automaticamente
# Jerarquia de busqueda de templates:
# 1. themes/mytheme/modules/mymodule/views/templates/ (override modulo en child)
# 2. themes/classic/modules/mymodule/views/templates/ (override modulo en padre)
# 3. modules/mymodule/views/templates/ (template original del modulo)
#Herencia en Smarty con {extends}
Heredar un template del padre y sobrescribir solo un bloque
smarty
{*
* themes/mytheme/templates/catalog/product.tpl
* Extiende el template del padre y sobrescribe solo el bloque de descripcion
*}
{extends file='parent:catalog/product.tpl'}
{* Solo sobreescribir el bloque de descripcion — el resto se hereda *}
{block name='product_description'}
<div class="my-custom-description">
{$product.description nofilter}
{* Añadir contenido extra *}
<div class="my-extra-info">
{l s='Informacion adicional de la tienda' mod='mytheme'}
</div>
</div>
{/block}
#Assets del child theme
themes/mytheme/assets/css/custom.css — solo tus estilos
css
/* Child theme CSS — se carga DESPUES del CSS del padre */
/* Solo sobrescribe lo que necesitas cambiar */
:root {
/* Cambiar los colores del tema */
--ps-brand: #e63946;
--ps-brand-hover: #c1121f;
}
/* Personalizar la cabecera */
.header-top {
background-color: #1d3557;
color: #f1faee;
}
/* Añadir estilos para tu bloque custom */
.my-custom-description {
padding: 2rem;
background: #f8f9fa;
border-left: 4px solid var(--ps-brand);
}
Actualizar el tema padre sin perder cambios
Al actualizar el tema padre (p.ej. Classic), tu child theme mantiene todos sus templates y assets personalizados. Solo necesitas revisar si algun template que sobreescribes ha cambiado significativamente en el padre.
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.