📋
Añadir columnas a listas existentes del Admin
Actualizado: 2024-12-01
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'])
);
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.