Grid System en modulos — integracion completa
Actualizado: 2024-12-01
El Grid System requiere registrar todos sus componentes en el contenedor de servicios. Luego el Symfony Controller obtiene el Grid renderizado y lo pasa al template Twig.
#Registrar el Grid en services.yml
config/services.yml — registro completo del Grid
yaml
services:
_defaults:
autowire: true
autoconfigure: true
public: true
# Definition Factory
MyModule\Grid\Definition\MyItemGridDefinitionFactory:
tags:
- { name: 'prestashop.core.grid.definition.factory', grid_id: 'my_module_items' }
# Query Builder
MyModule\Grid\Query\MyItemQueryBuilder:
arguments:
- '@doctrine.dbal.default_connection'
- '%database_prefix%'
# Data Provider
mymodule.grid.data_provider:
class: PrestaShop\PrestaShop\Core\Grid\Data\Factory\DoctrineGridDataFactory
arguments:
- '@MyModule\Grid\Query\MyItemQueryBuilder'
- '@prestashop.core.hook.dispatcher'
- '@prestashop.core.grid.search.search_criteria_applier'
- 'my_module_items'
# Grid Factory
mymodule.grid.factory:
class: PrestaShop\PrestaShop\Core\Grid\GridFactory
arguments:
- '@MyModule\Grid\Definition\MyItemGridDefinitionFactory'
- '@mymodule.grid.data_provider'
- '@prestashop.core.grid.search.search_criteria_factory'
- '@prestashop.core.hook.dispatcher'
#Usar el Grid en un Controller
src/Controller/Admin/ItemController.php — usar el Grid
php
<?php
declare(strict_types=1);
namespace MyModule\Controller\Admin;
use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;
use PrestaShopBundle\Service\Grid\ResponseBuilder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ItemController extends FrameworkBundleAdminController
{
public function indexAction(Request $request): Response
{
$gridFactory = $this->get('mymodule.grid.factory');
// Construir criterios de busqueda desde la request
$searchCriteria = $this->buildSearchCriteria($request, 'my_module_items', [
'orderBy' => 'id_mymodule_item',
'sortOrder' => 'asc',
'limit' => 25,
]);
// Obtener el grid
$grid = $gridFactory->getGrid($searchCriteria);
return $this->render('@Modules/mymodule/views/templates/admin/items/index.html.twig', [
'grid' => $this->presentGrid($grid),
'layoutTitle' => 'Mis Items',
'enableSidebar' => true,
]);
}
}
#Renderizar en Twig
views/templates/admin/items/index.html.twig
twig
{% extends '@PrestaShop/Admin/layout.html.twig' %}
{% trans_default_domain 'Modules.Mymodule.Admin' %}
{% block content %}
<div class="row">
<div class="col-xs-12">
{# Renderizar el grid completo (filtros + tabla + paginacion) #}
{{ include('@PrestaShop/Admin/Common/Grid/grid_panel.html.twig', {grid: grid}) }}
</div>
</div>
{% endblock %}
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.