Cómo crear un tema hijo en PrestaShop 1.7

PrestaShop 1.7 trae muchos cambios con respecto a las versiones anteriores relacionados principalmente con su aspecto. Una de las novedades más interesantes y evolutivas es la nueva forma para crear temas personalizados. Ahora se pueden usar los temas hijos de forma muy parecida a WordPress para extender el aspecto y comportamiento de otra plantilla.

De este modo, no hace falta duplicar o crear un tema completo. Puedes heredar aspectos y/o comportamientos del tema padre. En este punto recomiendo que el tema padre sea el tema “classic” que trae por defecto PrestaShop ya que recibe actualizaciones periódicamente pero, en la práctica puedes usar como padre cualquier otro tema que haya sido desarrollado para PrestaShop 1.7.

Si tienes conocimientos sobre la base de PrestaShop, crear un tema hijo o subordinado te resultará muy fácil.

Tema padre y estructura de archivos

En primer lugar debes tener localizado el tema que deseas usar como padre disponible en la carpeta de temas de la instalación de tu tienda. En el caso del tema que vamos a crear usaremos como padre el tema «classic» que trae PrestaShop por defecto.

A partir de ahí puedes crear una nueva carpeta con los archivos que representarán el tema hijo. En el caso del ejemplo que vamos a ilustrar crearemos una  nueva carpeta llamada “mytheme” con algunos directorios y archivos vacíos. En nuestro tema hijo «mytheme» tendremos la siguiente estructura:

CSS y JavaScript del tema hijo

Dentro de la carpeta assets de tu tema debes agregar todos los archivos CSS y JavaScript que formarán parte del tema hijo. Dentro de la carpeta assets debes crear una carpeta llamada css para los estilos y js para los archivos JavaScript. Si tienes dudas, en todo momento puedes revisar como está estructurado el tema «classic» de PrestaShop. La estructura de directorios y nombres de ficheros a sobrescribir deben ser con el mismo nombre y localización.

Cuando creas un tema hijo es porque necesitas modificar algunos detalles del tema padre o incluso también puede ser ideal para crear un tema completo totalmente diferente al tema padre. Hacerlo con un tema hijo te ahorrará mucho tiempo. A partir de ahora todos los archivos que necesites modificar, los puedes sobrescribir si es necesario.

Si necesitas modificar la hoja de estilos, lo ideal es sobrescribirlo en el tema hijo utilizando el archivo que trae por defecto vacío para los estilos propios:

/themes/mytheme/assets/css/custom.css

El archivo custom.css está en el tema padre vacío. Lo podemos aprovechar para agregar nuestros estilos propios.

Para diferenciar el tema hijo del tema padre vamos a agregar las siguientes líneas al archivo custom.css y así identificarlo:

#wrapper {
    background-color: red;
}

En este caso, tan solo agregamos al tema hijo un color de fondo para el contenedor principal de la tienda.

Para agregar nuevo código JavaScript puedes sobrescribir el archivo que viene vacío en el padre:

/themes/mytheme/assets/js/custom.js

El archivo de configuración del tema hijo

Dentro de la carpta config debe estar el archivo más importante y el que primero deberás rellenar. Se trata del archivo de configuración de la plantilla.

El archivo de configuración theme.yml que debe estar dentro del tema hijo es muy importante. En él puedes indicar todos los detalles de la plantilla tales como layouts, posiciones de los módulos, formatos y tamaños de imagen, etc.

Este debe estar situado en la siguiente ruta del tema hijo:

/themes/mytheme/config/theme.yml

En la primera parte de este archivo agregaremos:

parent: classic
name: mytheme
display_name: JA Modules theme.
version: 1.0.0
author:
  name: "Jose Aguilar"
  email: "info@jamodules.com"
  url: "http://www.jose-aguilar.com"
 
assets:
  use_parent_assets: false

En este caso estamos indicando que el el nombre del tema es “mytheme” y su padre es el “classic” y esto significa que “mytheme” hereda de “classic” todo su aspecto y comportamiento. Puedes agregar un nombre para mostrar en el directorio de módulos, la versión y la información del autor.

Después de esto, en el mismo archivo de configuración, puedes agregar más información tales como la compatibilidad, los tipos de plantilla disponibles, algunas configuraciones, módulos habilitados, posiciones de los módulos, tipos y tamaños de imágenes, etc.

A continuación el código completo de la configuración de nuestro tema «mytheme»:

parent: classic
name: mytheme
display_name: JA Modules theme.
version: 1.0.0
author:
  name: "Jose Aguilar"
  email: "info@jamodules.com"
  url: "http://www.jose-aguilar.com"
 
assets:
  use_parent_assets: false
 
meta:
  compatibility:
      from: 1.7.0.0
      to: ~
 
  available_layouts:
    layout-full-width:
      name: Full Width
      description: No side columns, ideal for distraction-free pages such as product pages.
    layout-both-columns:
      name: Three Columns
      description: One large central column and 2 side columns.
    layout-left-column:
      name: Two Columns, small left column
      description: Two columns with a small left column
    layout-right-column:
      name: Two Columns, small right column
      description: Two columns with a small right column
 
global_settings:
  configuration:
    PS_IMAGE_QUALITY: png
  modules:
   to_enable:
     - ps_linklist
  hooks:
    modules_to_hook:
      displayNav1:
        - ps_contactinfo
      displayNav2:
        - ps_languageselector
        - ps_currencyselector
        - ps_customersignin
        - ps_shoppingcart
      displayTop:
        - ps_mainmenu
        - ps_searchbar
      displayHome:
        - ps_imageslider
        - ps_featuredproducts
        - ps_banner
        - ps_customtext
      displayFooterBefore:
        - ps_emailsubscription
        - ps_socialfollow
      displayFooter:
        - ps_linklist
        - ps_customeraccountlinks
        - ps_contactinfo
      displayLeftColumn:
        - ps_categorytree
        - ps_facetedsearch
      displaySearch:
        - ps_searchbar
      displayProductAdditionalInfo:
        - ps_sharebuttons
      displayReassurance:
        - blockreassurance
      displayOrderConfirmation2:
        - ps_featuredproducts
      displayCrossSellingShoppingCart:
        - ps_featuredproducts
 
  image_types:
    cart_default:
      width: 125
      height: 125
      scope: [products]
    small_default:
      width: 98
      height: 98
      scope: [products, categories, manufacturers, suppliers]
    medium_default:
      width: 452
      height: 452
      scope: [products, manufacturers, suppliers]
    home_default:
      width: 250
      height: 250
      scope: [products]
    large_default:
      width: 800
      height: 800
      scope: [products, manufacturers, suppliers]
    category_default:
      width: 141
      height: 180
      scope: [categories]
    stores_default:
      width: 170
      height: 115
      scope: [stores]
 
theme_settings:
  default_layout: layout-full-width
  layouts:
    category: layout-left-column
    best-sales: layout-left-column
    new-products: layout-left-column
    prices-drop: layout-left-column
    contact: layout-left-column

Toda esta información se puede copiar del tema “classic” y modificarlo según las necesidades o deseos para el tema hijo.

Imágenes para el tema hijo

Dentro de la estructura de carpetas y ficheros del tema hijo también puedes incorporar una carpeta img para las imágenes del tema. Si necesitas agregar alguna imagen extra puedes usar un directorio de imágenes:

/themes/mytheme/img/

Por temas de rendimiento desaconsejo utilizar imágenes en la medida de lo posible. Cuantas menos imágenes use tu tema mucho mejor.

Plantillas de emails en el tema hijo

Si vas a hacer modificaciones en las plantillas de los emails, puedes crear la carpeta mails y agregar tus plantillas personalizadas. Siempre con el mismo nombre de archivo que utiliza PrestaShop. La ruta donde debes agregar tus plantillas sería:

/themes/mytheme/mails/

Plantillas de los módulos en el tema hijo

Si necesitas modificar visualmente algún módulo en tu tema hijo tan solo debes mover los archivos de visualización del módulo a tu tema hijo justamente dentro de la carpeta:

/themes/mytheme/modules/

Plantillas para las facturas en el tema hijo

Las plantillas que se usan para la factura también pueden ser modificadas en tu tema hijo agregando los archivos sobrescritos en la carpeta pdf:

/themes/mytheme/pdf/

Plantillas categorías, productos, mi cuenta, etc en el tema hijo

Si necesitas modificar visualmente alguna parte de tu plantilla, como por ejemplo la página del producto, tendrás que copiar el fichero que desees editar de la plantilla padre y depositarlo en el directorio del tema hijo correspondiente para sobrescribirlo. Las plantillas o archivos .tpl están todos dentro de la carpeta:

/themes/mytheme/templates/

Vista previa

El archivo preview.png es necesario agregarlo para mostrar una vista rápida del tema hijo. Esta imagen será la que se verá en la configuración del diseño y tema para tu tienda.

Diseño – Elegir tema

Una vez tenemos los archivos completados de nuestro tema hijo es posible seleccionar nuestro tema hijo desde el Backoffice.

Si nos situamos por encima de nuestro tema «mytheme» y pulsamos en el botón «Utilizar este tema» se sitúa nuestro tema hijo como tema actual de la tienda:

Al visitar la parte frontal de la tienda ya se muestra con el tema hijo que hemos creado de ejemplo.

Conclusiones

Ahora ya puedes personalizarlo a tu gusto modificando los archivos correspondientes y sobrescribiendo en el tema hijo las plantillas deseadas del tema padre.

De esta forma, en el caso de utilizar el tema «classic» como padre siempre podrás actualizar PrestaShop y tu tema hijo seguirá funcionando ya que heredará también las novedades introducidas en el tema padre.

Personalmente pienso que este sistema puede mantenerse por bastante tiempo o eso espero. Es un gran inconveniente tener que rehacer una plantilla de nuevo para poder actualizar después de un año. Es mucho trabajo que esperamos se pueda ahorrar con el tema hijo.

Todo apunta a que PrestaShop mantendrá este sistema por mucho tiempo. En WordPress hice un tema hace más de 10 años y todavía sigue funcionando en nuevas versiones de WordPress. ¿Esto sería un sueño en PrestaShop? ¿Qué opináis?

Descargar tema hijo de ejemplo

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(14 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

4 respuestas a “Cómo crear un tema hijo en PrestaShop 1.7”

  1. joaquin dice:

    Hola,

    ¿Es posible crear varios temas hijo en un multisite?

    Gracias

    • Jose Aguilar dice:

      Hola,

      La creación de temas es ilimitada. Puedes crear tantos temas como desees para luego asignarlos a cada tienda del sistema de múltiples tiendas.

      Saludos

  2. Marcos dice:

    Buenas Jose,

    Muchas gracias por tu artículo. Verás. he seguido el tutorial pero no consigo que mirando el código fuente se queden las rutas de los css y js apuntando a /mi-tema/assets…. si no que salen todas a /warehouse/assets…. todos excepto el custom.css que si que sale con la ruta de /mi-tema/

    te ha pasado alguna vez ?

    • Jose Aguilar dice:

      Hola,

      Si, ese comportamiento es normal ya que se trata de un tema hijo. En tu caso supongo que el padre será el tema warehouse.

      En tu tema hijo usa el custom.css para alterar todo lo que desees cambiar del tema padre.

      Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.