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.