---
title: Controller Overrides en PrestaShop
section: overrides
slug: controller-overrides
description: "Como crear overrides de controllers en PrestaShop: FrontControllers (ProductController, CategoryController) y AdminControllers con buenas practicas."
keywords: prestashop controller override ProductController CategoryController AdminOrdersController FrontController AdminController
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/overrides/controller-overrides"
---

# Controller Overrides en PrestaShop

> Como crear overrides de controllers en PrestaShop: FrontControllers (ProductController, CategoryController) y AdminControllers con buenas practicas.

Los overrides de controllers permiten modificar el comportamiento de las paginas del core de PrestaShop (ficha de producto, listado de categoria, pagina de pedidos del BO...). Antes de usar overrides, verifica si existe un hook equivalente.

## Override de FrontController

*override/controllers/front/ProductController.php*

```php
<?php

if (!defined('_PS_VERSION_')) { exit; }

/**
 * Override del controlador de ficha de producto.
 * ANTES de usar esto, verifica:
 * - displayProductExtraContent (para añadir contenido)
 * - actionProductFormBuilderModifier (para el admin)
 * - hookActionFrontControllerSetMedia (para CSS/JS)
 */
class ProductController extends ProductControllerCore
{
    /**
     * Extender initContent para añadir variables extra a Smarty.
     */
    public function initContent(): void
    {
        // SIEMPRE llamar al padre primero
        parent::initContent();

        // Añadir nuestra variable al template de producto
        if ($this->product && $this->product->id) {
            $extraData = Db::getInstance()->getRow(
                'SELECT * FROM `' . _DB_PREFIX_ . 'mymodule_product_extra`
                 WHERE id_product = ' . (int) $this->product->id
            );

            $this->context->smarty->assign('mymodule_extra', $extraData ?: []);
        }
    }
}
```

## Override de AdminController

*override/controllers/admin/AdminOrdersController.php*

```php
<?php

if (!defined('_PS_VERSION_')) { exit; }

/**
 * Override del controlador de pedidos del BO.
 * ALTERNATIVA: usar hookActionAdminOrdersControllerPostProcessBefore
 * o hookDisplayAdminOrderMain para añadir contenido.
 */
class AdminOrdersController extends AdminOrdersControllerCore
{
    /**
     * Añadir un boton extra a la barra de herramientas de pedido.
     */
    public function initPageHeaderToolbar(): void
    {
        // Llamar al padre primero
        parent::initPageHeaderToolbar();

        // Solo añadir el boton si hay un pedido seleccionado
        if ($this->object && $this->object->id) {
            $this->page_header_toolbar_btn['mymodule_action'] = [
                'href'  => self::$currentIndex
                           . '&id_order=' . (int) $this->object->id
                           . '&mymodule_action=1'
                           . '&token=' . $this->token,
                'desc'  => $this->l('Accion de Mi Modulo'),
                'icon'  => 'process-icon-export',
            ];
        }
    }
}
```

## Hooks disponibles en controllers

| Controller | Hook alternativo |
| --- | --- |
| ProductController::initContent() | displayProductExtraContent, displayProductAdditionalInfo |
| CategoryController::initContent() | displayProductListFunctionalButtons, filterProductSearch |
| CartController::processChangeProductInCart() | actionCartSave, actionBeforeCartUpdateQty |
| OrderController::confirmOrder() | actionValidateOrder, displayOrderConfirmation |
| AdminOrdersController::postProcess() | actionAdminOrdersControllerPostProcessBefore |
| AdminProductsController::postProcess() | actionAfterUpdateProductFormHandler |
| AdminCatalogsController::initContent() | displayAdminListBefore, displayAdminListAfter |

## Metodos mas comunes a sobreescribir

| Metodo | Cuando usarlo |
| --- | --- |
| initContent() | Añadir datos al contexto Smarty |
| setMedia() | Añadir CSS/JS especificos |
| postProcess() | Procesar logica antes del render |
| getBreadcrumbLinks() | Personalizar el breadcrumb |
| initPageHeaderToolbar() | Añadir botones al BO (Admin) |
| renderList() | Personalizar el listado (Admin) |
| renderForm() | Personalizar el formulario (Admin) |


---

*Fuente: [https://ayudaprestashop.es/overrides/controller-overrides](https://ayudaprestashop.es/overrides/controller-overrides). Version Markdown generada automaticamente para consumo por LLMs.*
