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'); } } } } }
Laisser un commentaire