Prestashop 1.7 : modifier la liste des clients du back-office

Il est difficile de trouver un exemple simple pour écrire un module Prestashop 1.7 qui permette de modifier la liste des clients dans le back office Prestashop

Voici un exemple d’un fichier,  pour la création d’un module qui ajoute le champ « groupe client » dans le listing des clients.

Ce n’est pas « parfait » (il manque notamment un select pour les filtres) mais ce petit bout de code vous fera peut-être gagner du temps  !

Bien penser à réinitialiser le module à chaque changement du code si vous mettez à jour le fichier via ftp par exemple.

Je me suis servi de ce tutoriel également

if (!defined('_PS_VERSION_')) {
    exit;
}
use PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn;
use PrestaShop\PrestaShop\Core\Grid\Filter\Filter;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;


/* https://webkul.com/blog/adding-a-new-column-in-prestashop-new-symfony-admin-controller-grid-page-with-module */
/* bien penser à REINITIALISER le module à chaque changement du code ! */

class CustomerGroupColumn extends Module
{
    public function __construct()
    {
        $this->name = 'customergroupcolumn';
        $this->author = 'Your Name';
        $this->version = '1.0.0';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('Customer Group Column');
        $this->description = $this->l('Adds a "Customer Group" column to the customer list in the back-office.');

        $this->confirmUninstall = $this->l('Are you sure you want to uninstall?');
    }

    public function install()
    {
        return parent::install() &&
            $this->registerHook('ActionCustomerGridDefinitionModifier')  &&
            $this->registerHook('ActionCustomerGridQueryBuilderModifier') 
        ;
    }

    public function uninstall()
    {
        return parent::uninstall();
    }

    public function hookActionCustomerGridDefinitionModifier(array $params)
    {
        /** @var GridDefinitionInterface $definition */
        $definition = $params['definition'];
        $definition
            ->getColumns()
            ->addAfter(
                'lastname',
                (new DataColumn('groupe'))
                    ->setName("N°Groupe")
                    ->setOptions([
                        'field' => 'groupe',
                    ])
            )
        ;
        // For search filter
         // $definition->getFilters();
         // dump($definition);die();

        $definition->getFilters()->add(
            (new Filter('groupe', TextType::class))    //ChoiceType 
            ->setAssociatedColumn('groupe')
        );
         

    }

    /**
     * Hook allows to modify Customers query builder and add custom sql statements.
     *
     * @param array $params
     */
    public function hookActionCustomerGridQueryBuilderModifier(array $params)
    {
        /** @var QueryBuilder $searchQueryBuilder */
        $searchQueryBuilder = $params['search_query_builder'];
        /** @var CustomerFilters $searchCriteria */
        $searchCriteria = $params['search_criteria'];
        $searchQueryBuilder->addSelect(
            ' CONCAT( cg.id_group , "-",  cgl.name)  AS `groupe`'
        );

        // dump($searchQueryBuilder);die;
        $searchQueryBuilder->leftJoin(
            'c',
            '`' . pSQL(_DB_PREFIX_) . 'customer_group`',
            'cg',
            'cg.`id_customer` = c.`id_customer`'
        );
        
        $searchQueryBuilder->leftJoin(
            'cg',
            '`' . pSQL(_DB_PREFIX_) . 'group_lang`',
            'cgl',
            'cgl.`id_group` = cg.`id_group` and cgl.id_lang=1'
        );

        if ('groupe' === $searchCriteria->getOrderBy()) {
            $searchQueryBuilder->orderBy('cg.`id_group`', $searchCriteria->getOrderWay());
        }
        foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {
            if ('groupe' === $filterName) {
                $searchQueryBuilder->andWhere('cg.`id_group` = :groupe');
                $searchQueryBuilder->setParameter('groupe', $filterValue);
                if (!$filterValue) {
                    $searchQueryBuilder->orWhere('cg.`id_group` IS NULL');
                }
            }
        }

    }

 
}



Publié dans Dev

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Changer d’hébergeur

Service de migration de serveurs, sites web, domaines et emails

Tél. +33.3.81.47.93.85
Email : info@demenageur-site.com
Twitter : DemenageurSite
Web : www.demenageur-site.com