📁 Estructura del tema PrestaShop

Actualizado: 2024-12-01

Un tema de PrestaShop es una coleccion de plantillas Smarty (.tpl), archivos CSS/JS, imagenes y un archivo de configuracion theme.yml que define los metadatos del tema y su estructura. Los temas viven en /themes/nombre-del-tema/ dentro de la instalacion de PrestaShop.

💡
Tema de referencia

El tema oficial Classic (PS 1.7/8.x) y Hummingbird (PS 9.x) son el punto de partida recomendado para crear temas propios. Siempre parte de un child theme del tema oficial en lugar de modificar el tema padre directamente.

#Estructura de directorios

Estructura completa de un tema PrestaShop
bash
themes/
└── mytheme/
    ├── theme.yml                    # Manifesto del tema (REQUERIDO)
    ├── preview.png                  # Captura de pantalla (800x600px)
    │
    ├── config/                      # Configuracion del tema
    │   └── theme.yml                # Configuracion extendida (hooks, columnas)
    │
    ├── assets/
    │   ├── css/
    │   │   ├── theme.css            # Estilos compilados del tema
    │   │   └── custom.css           # Personalizaciones adicionales
    │   ├── js/
    │   │   ├── theme.js             # JavaScript del tema
    │   │   └── custom.js
    │   └── img/
    │       └── logo.png
    │
    ├── templates/                   # Plantillas Smarty (.tpl)
    │   ├── catalog/
    │   │   ├── listing/
    │   │   │   ├── product-list.tpl
    │   │   │   └── products.tpl
    │   │   ├── product.tpl          # Pagina de producto
    │   │   ├── category.tpl         # Pagina de categoria
    │   │   └── search.tpl
    │   ├── checkout/
    │   │   ├── cart.tpl
    │   │   ├── checkout.tpl
    │   │   └── order-confirmation.tpl
    │   ├── customer/
    │   │   ├── my-account.tpl
    │   │   ├── authentication.tpl
    │   │   └── address.tpl
    │   ├── cms/
    │   │   └── page.tpl
    │   ├── errors/
    │   │   ├── 404.tpl
    │   │   └── 500.tpl
    │   ├── _partials/               # Bloques reutilizables
    │   │   ├── head.tpl
    │   │   ├── header.tpl
    │   │   ├── footer.tpl
    │   │   ├── breadcrumb.tpl
    │   │   └── notifications.tpl
    │   ├── layouts/
    │   │   ├── layout-full-width.tpl
    │   │   ├── layout-left-column.tpl
    │   │   └── layout-right-column.tpl
    │   ├── index.tpl                # Homepage
    │   └── page.tpl                 # Template base de paginas
    │
    └── modules/                     # Overrides de templates de modulos
        ├── ps_imageslider/
        │   └── views/templates/hook/
        │       └── slider.tpl
        └── ps_shoppingcart/
            └── modal.tpl

#theme.yml — el manifesto

El archivo theme.yml en la raiz del tema es obligatorio y define todos los metadatos del tema, la version de PrestaShop compatible y las opciones de configuracion.

theme.yml — estructura completa
yaml
name: mytheme
display_name: "Mi Tema Custom"
version: "1.0.0"
author:
  name: "Tu Nombre"
  email: "tu@email.com"
  url: "https://tudominio.com"

meta:
  compatibility:
    from: "1.7.0.0"
    to: ~               # null = sin limite superior
  available_layouts:
    layout-full-width:
      name: "Full width"
      description: "Layout sin columnas laterales"
    layout-left-column:
      name: "Left column"
      description: "Layout con columna izquierda"
    layout-right-column:
      name: "Right column"
      description: "Layout con columna derecha"
  default_layout: layout-full-width

global_settings:
  configuration:
    PS_QUICK_VIEW: 0
    NEW_PRODUCTS_NBR: 8
    PS_PRODUCTS_PER_PAGE: 12
  hooks:
    custom_hook: []
  image_types:
    cart_default:
      width: 125
      height: 125
    small_default:
      width: 98
      height: 98
    medium_default:
      width: 452
      height: 452
    large_default:
      width: 800
      height: 800
    home_default:
      width: 250
      height: 250
    category_default:
      width: 960
      height: 350
    product_listing:
      width: 220
      height: 220

page_layouts:
  index: layout-full-width
  product: layout-right-column
  category: layout-left-column
  cms: layout-full-width

#Directorio templates/

Las plantillas Smarty (.tpl) replican la estructura de URLs del front office. Cada pagina tiene su template correspondiente. PrestaShop busca primero en el tema activo antes de usar el template por defecto.

URL / PaginaTemplateDescripcion
/ (inicio)templates/index.tplHomepage de la tienda
/productotemplates/catalog/product.tplFicha de producto
/categoriatemplates/catalog/category.tplListado de categoria
/busquedatemplates/catalog/search.tplResultados de busqueda
/carritotemplates/checkout/cart.tplPagina del carrito
/pagotemplates/checkout/checkout.tplFlujo de pago (Symfony)
/confirmaciontemplates/checkout/order-confirmation.tplConfirmacion de pedido
/mi-cuentatemplates/customer/my-account.tplPanel de cliente
/cmstemplates/cms/page.tplPaginas CMS estaticas
Cabecera globaltemplates/_partials/header.tplHeader comun a todas las paginas
Pie de paginatemplates/_partials/footer.tplFooter comun
Head HTMLtemplates/_partials/head.tplEtiquetas

#Directorio assets/

Los assets del tema (CSS, JS, imagenes) se gestionan a traves de theme.yml y del hook actionFrontControllerSetMedia. PrestaShop puede concatenar y comprimir (CCC) los archivos automaticamente si esta activado en el BO.

Registro de assets en theme.yml (config/theme.yml)
yaml
assets:
  css:
    all:
      - id: theme-main
        path: assets/css/theme.css
        media: all
        priority: 50
  js:
    all:
      - id: theme-main
        path: assets/js/theme.js
        position: bottom
        priority: 50

#Herencia y child themes

PrestaShop soporta herencia de temas. Un child theme solo necesita incluir los archivos que difieren del tema padre — el resto se hereda automaticamente. Esto evita duplicar cientos de templates.

theme.yml de un child theme
yaml
name: mytheme-child
display_name: "Mi Tema Child"
version: "1.0.0"

parent: classic    # Nombre del directorio del tema padre

meta:
  compatibility:
    from: "1.7.8.0"
    to: ~
⚠️
Limitaciones de child themes

Los child themes de PrestaShop solo heredan templates (.tpl). Los assets CSS/JS del padre NO se heredan automaticamente — debes copiarlos o enlazarlos explicitamente en tu theme.yml.

Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.