---
title: Añadir columnas a listas existentes del Admin
section: trucos
slug: admin-columns
description: "Como añadir columnas personalizadas a los grids existentes del admin de PrestaShop 8/9: actionProductGridDefinitionModifier, actionOrderGridDefinitionModifier, hookActionXxxGridQueryBuilderModifier."
keywords: prestashop admin columnas grid listas pedidos productos clientes modifier hook
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/trucos/admin-columns"
---

# Añadir columnas a listas existentes del Admin

> Como añadir columnas personalizadas a los grids existentes del admin de PrestaShop 8/9: actionProductGridDefinitionModifier, actionOrderGridDefinitionModifier, hookActionXxxGridQueryBuilderModifier.

El Grid System de PrestaShop expone hooks que permiten a los modulos **añadir columnas, filtros y acciones** a los grids existentes del core sin modificar ningun archivo del sistema.

## Hooks de modificacion de grids

| Hook | Grid afectado |
| --- | --- |
| actionProductGridDefinitionModifier | Catalogo > Productos |
| actionOrderGridDefinitionModifier | Pedidos > Pedidos |
| actionCustomerGridDefinitionModifier | Clientes > Clientes |
| actionManufacturerGridDefinitionModifier | Catalogo > Marcas |
| actionCategoryGridDefinitionModifier | Catalogo > Categorias |
| actionCarrierGridDefinitionModifier | Transporte > Transportistas |
| actionSupplierGridDefinitionModifier | Catalogo > Proveedores |
| actionProductGridQueryBuilderModifier | Query del grid de Productos |
| actionOrderGridQueryBuilderModifier | Query del grid de Pedidos |

## Añadir columna al grid de Pedidos

*Patron completo: columna + query + filtro*

```php
<?php

use PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn;
use PrestaShop\PrestaShop\Core\Grid\Filter\Filter;
use Symfony\Component\Form\Extension\Core\Type\TextType;

public function install(): bool
{
    return parent::install()
        && $this->registerHook('actionOrderGridDefinitionModifier')
        && $this->registerHook('actionOrderGridQueryBuilderModifier');
}

// 1. Añadir columna a la definicion del grid
public function hookActionOrderGridDefinitionModifier(array $params): void
{
    $definition = $params['definition'];

    // Añadir columna de datos
    $definition->getColumns()->addAfter(
        'reference',
        (new DataColumn('mymodule_status'))
            ->setName($this->trans('Estado externo', [], 'Modules.Mymodule.Admin'))
            ->setOptions(['field' => 'mymodule_status'])
    );

    // Añadir filtro para la columna
    $definition->getFilters()->add(
        (new Filter('mymodule_status', TextType::class))
            ->setTypeOptions(['required' => false])
            ->setAssociatedColumn('mymodule_status')
    );
}

// 2. Modificar la query para traer el campo
public function hookActionOrderGridQueryBuilderModifier(array $params): void
{
    /** @var \Doctrine\DBAL\Query\QueryBuilder $qb */
    $qb = $params['search_query_builder'];
    $sf = $params['search_criteria'];

    $qb->addSelect('moe.status AS mymodule_status');
    $qb->leftJoin(
        'o',
        _DB_PREFIX_ . 'mymodule_order_extra',
        'moe',
        'moe.id_order = o.id_order'
    );

    // Aplicar filtro si existe
    foreach ($sf->getFilters() as $field => $value) {
        if ('mymodule_status' === $field && $value !== '') {
            $qb->andWhere('moe.status LIKE :mymodule_status')
               ->setParameter('mymodule_status', '%' . $value . '%');
        }
    }
}
```

## Columnas con formato especial

*Tipos de columna disponibles en el Grid System*

```php
<?php

use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\ToggleColumn;     // Switch on/off
use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\ImageColumn;     // Imagen
use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\LinkColumn;      // Enlace
use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\ColorColumn;     // Color
use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\DateTimeColumn;  // Fecha
use PrestaShop\PrestaShop\Core\Grid\Column\Type\Common\BadgeColumn;     // Badge

// Columna toggle (activo/inactivo)
$definition->getColumns()->addAfter('name',
    (new ToggleColumn('active'))
        ->setName($this->trans('Activo', [], 'Admin.Global'))
        ->setOptions([
            'field'         => 'active',
            'primary_field' => 'id_order',
            'route'         => 'admin_mymodule_toggle_active',
            'route_param_name' => 'id',
        ])
);

// Columna de fecha formateada
$definition->getColumns()->addAfter('status',
    (new DateTimeColumn('date_add'))
        ->setName($this->trans('Fecha', [], 'Admin.Global'))
        ->setOptions(['field' => 'date_add'])
);
```


---

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