Caso de estudio

Personalización PrestaShop 8 con el tema Falcon

PrestaShop Falcon VGS es una personalización completa de una tienda PrestaShop 8 desarrollada a partir del tema Falcon 3.1.2 y de un diseño proporcionado en Figma. El trabajo abarca la cabecera, la navegación, el buscador, el listado y los filtros de categoría, la ficha de producto, el breadcrumb, la paginación y el footer.

El objetivo principal fue reproducir la propuesta visual sin sustituir la arquitectura del tema ni modificar el núcleo de PrestaShop. Para ello se adaptaron las plantillas Smarty, los hooks, los módulos y los contenedores responsive que Falcon ya proporcionaba, manteniendo operativos el buscador, el carrito, la cuenta de cliente y la navegación móvil.

Figma → PrestaShop Smarty + SCSS Núcleo intacto Responsive nativo
PrestaShop 8 personalización realizada sobre una instalación limpia y conservando el funcionamiento nativo
Falcon 3.1.2 adaptación del tema y de su sistema responsive sin construir una solución paralela
4 módulos integración con imágenes, buscador, carrito y núcleo funcional del tema Falcon
Node 18 entorno compatible para inicializar Falcon y compilar los recursos mediante Webpack

Problema / reto

Reproducir un diseño de Figma sin romper una arquitectura de eCommerce existente

El reto no consistía únicamente en modificar colores y espaciados. Falcon ya incluía plantillas, módulos, hooks, comportamiento JavaScript y una estrategia propia para mover elementos entre escritorio y móvil. La personalización debía integrarse con esa estructura en lugar de reemplazarla.

  • Adaptar la cabecera, la navegación y el buscador sin perder su contenido dinámico.
  • Mantener operativos la cuenta de cliente, el carrito y los resultados del buscador.
  • Personalizar tarjetas, filtros, paginación y ficha de producto conservando los datos nativos.
  • Evitar IDs duplicados y bloques repetidos al cambiar entre escritorio y móvil.
  • Organizar los estilos por componente para limitar conflictos con Bootstrap y Falcon.
  • Trabajar sin modificar el núcleo de PrestaShop ni introducir overrides PHP innecesarios.
  • Comprender el sistema de compilación y caché para poder verificar cada cambio.

Solución

Extender las plantillas y componentes existentes en lugar de sustituirlos

La solución se apoyó en varios principios:

  • Smarty para reorganizar el marcado y los datos de cada bloque.
  • Hooks existentes para conservar la ubicación y el funcionamiento de los módulos.
  • SCSS por componente para mantener los cambios localizados.
  • Responsive de Falcon para reutilizar el movimiento nativo de bloques.
  • Webpack para generar los assets finales después de cada cambio.

Criterio técnico

Una personalización visual compatible con el comportamiento de la tienda

Cada decisión visual se comprobó también desde el punto de vista funcional. El buscador debía seguir devolviendo productos, el menú móvil debía abrir el modal nativo, el carrito debía conservar sus datos y las plantillas de producto debían seguir recibiendo precios, descuentos, disponibilidad y características.

  • Sin modificaciones del core.
  • Sin duplicar sistemas ya resueltos por Falcon.
  • Con clases BEM y selectores limitados a cada componente.
  • Con adaptación progresiva para escritorio, tablet y móvil.

Arquitectura

Plantillas Smarty y estilos SCSS separados por área de la tienda

Los cambios se organizaron alrededor de las partes principales de Falcon. Las plantillas controlan el marcado y la posición de los datos, mientras que los archivos SCSS agrupan las reglas visuales por cabecera, categoría, producto, breadcrumb y footer.

themes/falcon/
├── _dev/
│   └── css/
│       ├── custom/
│       │   ├── breadcrumb/
│       │   │   ├── _breadcrumb.scss
│       │   │   └── _index.scss
│       │   ├── footer/
│       │   │   ├── _footer.scss
│       │   │   └── _index.scss
│       │   ├── header/
│       │   │   ├── _header-nav.scss
│       │   │   ├── _header.scss
│       │   │   ├── _index.scss
│       │   │   └── _search-form.scss
│       │   ├── page-category/
│       │   │   ├── _active-filters.scss
│       │   │   ├── _category-heading.scss
│       │   │   ├── _cover-image.scss
│       │   │   ├── _filters.scss
│       │   │   ├── _index.scss
│       │   │   ├── _pagination.scss
│       │   │   └── _products.scss
│       │   └── page-product/
│       │       ├── _container.scss
│       │       ├── _index.scss
│       │       ├── _product-details.scss
│       │       ├── _product-tabs.scss
│       │       ├── _slider-image.scss
│       │       └── _slider-thumbs.scss
│       ├── fonts/
│       │   ├── montserrat-v31-latin-300.woff2
│       │   ├── montserrat-v31-latin-500.woff2
│       │   ├── montserrat-v31-latin-600.woff2
│       │   ├── montserrat-v31-latin-700.woff2
│       │   ├── montserrat-v31-latin-800.woff2
│       │   └── montserrat-v31-latin-900.woff2
│       ├── theme/
│       │   └── base/
│       │       ├── _fonts.scss
│       │       └── _typography.scss
│       └── theme.scss
├── modules/
│   ├── ps_contactinfo/
│   │   └── ps_contactinfo.tpl
│   ├── ps_customersignin/
│   │   └── ps_customersignin.tpl
│   ├── ps_facetedsearch/
│   │   └── views/
│   │       └── templates/
│   │           └── front/
│   │               └── catalog/
│   │                   ├── active-filters.tpl
│   │                   └── facets.tpl
│   └── ps_linklist/
│       └── views/
│           └── templates/
│               └── hook/
│                   └── linkblock.tpl
└── templates/
    ├── _partials/
    │   ├── breadcrumb.tpl
    │   ├── footer.tpl
    │   ├── header.tpl
    │   └── pagination.tpl
    ├── catalog/
    │   ├── _partials/
    │   │   ├── miniatures/
    │   │   │   ├── _partials/
    │   │   │   │   ├── product-prices.tpl
    │   │   │   │   └── product-thumb.tpl
    │   │   │   └── product.tpl
    │   │   ├── category-header.tpl
    │   │   ├── product-add-to-cart.tpl
    │   │   ├── product-cover-thumbnails.tpl
    │   │   ├── product-prices.tpl
    │   │   ├── product-tabs.tpl
    │   │   └── products-top.tpl
    │   └── product.tpl
    └── layouts/
        └── layout-both-columns.tpl

Esta división permite localizar rápidamente cada cambio y reduce el riesgo de que una regla destinada a la ficha de producto termine afectando al listado o al buscador.

Personalizaciones

De la cabecera al footer: adaptación completa de las vistas principales

Cabecera y navegación

  • Barra superior amarilla con horario, teléfono y mensaje de envío gratuito.
  • Logo, buscador, cuenta y carrito reorganizados para escritorio.
  • Barra principal verde azulada con botón de categorías.
  • Integración con displayNavFullWidth.
  • Iconos sustituidos por SVG cuando era necesario.

Categoría y catálogo

  • Tarjetas con borde, radio, hover y proporción de imagen controlada.
  • Precio actual, precio anterior y badge de producto nuevo.
  • Filtros activos y contenedor de facetas adaptados.
  • Paginación con estados activo, deshabilitado y hover.
  • Grid responsive para diferentes anchos de pantalla.

Ficha de producto

  • Galería principal y miniaturas personalizadas.
  • Precio, descuento e impuestos reorganizados.
  • Bloque con marca, referencia y disponibilidad.
  • Características distribuidas de dos en dos por fila.
  • Ocultación de elementos que no aparecían en Figma.

Breadcrumb y footer

  • Breadcrumb alineado con el contenido y con icono SVG de inicio.
  • Desplazamiento horizontal controlado en móvil.
  • Footer con contacto y tres columnas de enlaces.
  • Distribución en una columna para pantallas pequeñas.
  • Copyright separado mediante una línea superior.

Responsive

Reutilizar el sistema móvil de Falcon

Falcon mueve determinados bloques entre contenedores mediante JavaScript. En lugar de duplicar el menú, el buscador o los accesos de usuario, se mantuvieron los contenedores previstos por el tema y se adaptaron sus estilos.

  • Modal móvil nativo para el menú de categorías.
  • Contenedores específicos para escritorio y móvil.
  • Control de IDs y marcado para evitar duplicados.
  • Breakpoints compatibles con Bootstrap y Falcon.

Módulos

Integración con las piezas requeridas por el tema

  • is_imageslider: gestión del slider de imágenes.
  • is_searchbar: buscador y resultados dinámicos.
  • is_shoppingcart: acceso y estado del carrito.
  • is_themecore: funcionalidades base de Falcon.

La personalización visual se realizó alrededor de estos módulos, no reemplazándolos por bloques estáticos.

Dificultades y soluciones

Incidencias reales de entorno, compilación y comportamiento del tema

01

Compatibilidad de Node.js

Falcon no compilaba correctamente con Node.js 24. Se utilizó Node.js 18.18.0 y npm 9.8.1, se reinstalaron las dependencias y se ejecutó de nuevo project-init.

02

Error 500 en WAMP

Algunas directivas antiguas de .htaccess no eran compatibles con la configuración actual de Apache. Se revisó mod_authz_core y se adaptaron las reglas problemáticas.

03

OpenSSL y certificados

Los errores de openssl_pkey_new se resolvieron revisando las extensiones PHP y la ruta configurada para cacert.pem en WAMP64.

04

Caché de Symfony

La limpieza de caché podía bloquearse o agotar memoria. Se revisó la ruta temporal y se ejecutó php -d memory_limit=512M bin/console cache:clear.

05

Conflictos de estilos

Bootstrap y Falcon sobrescribían algunas reglas. Se aumentó la especificidad solo cuando era necesario, se limitó el uso de !important y se separó el SCSS por componente.

06

Características en dos columnas

La plantilla original mostraba una característica por fila. Se añadió un contador Smarty para agrupar dos características completas y crear celdas vacías cuando el número era impar.

Criterios de desarrollo

Decisiones orientadas al mantenimiento

  • No modificar el núcleo de PrestaShop.
  • Evitar PHP adicional cuando Smarty y los hooks eran suficientes.
  • Conservar módulos y funcionalidades nativas.
  • Separar los estilos por componentes.
  • Reducir reglas duplicadas y selectores globales.
  • Priorizar soluciones compatibles con futuras modificaciones.

Compilación

Flujo para aplicar y comprobar cambios

cd themes/falcon/_dev
npm install
npm run project-init
npm run build

# Desde la raíz de PrestaShop
php -d memory_limit=512M bin/console cache:clear

Después se realiza una recarga sin caché del navegador para comprobar los recursos generados.

Resultado

Una tienda adaptada al diseño sin perder las capacidades de PrestaShop y Falcon

El resultado es una personalización visual completa que conserva la estructura funcional de PrestaShop. La cabecera, la navegación, el catálogo, los filtros, la ficha y el footer siguen trabajando con datos y módulos reales, pero presentan una interfaz alineada con la propuesta de Figma.

Como proyecto de portfolio, demuestra capacidad para trabajar sobre una base existente, comprender una arquitectura desconocida, adaptar Smarty y SCSS, resolver problemas de compilación y entorno, y equilibrar fidelidad visual con mantenimiento y compatibilidad.

Galería

Vistas principales de la personalización

Sustituye estas imágenes de muestra por capturas reales de la home o cabecera, el listado de categoría y la ficha de producto.

Contacto

¿Quieres ver más proyectos de PrestaShop y WordPress?

Puedo enseñarte más desarrollos de temas, módulos, plugins, integraciones y maquetaciones realizadas a partir de Figma.