{"id":694,"date":"2023-05-24T13:00:22","date_gmt":"2023-05-24T13:00:22","guid":{"rendered":"https:\/\/www.demenageur-site.com\/blog\/?p=694"},"modified":"2023-05-24T13:05:50","modified_gmt":"2023-05-24T13:05:50","slug":"prestashop-1-7-modifier-la-liste-des-clients-du-back-office","status":"publish","type":"post","link":"https:\/\/www.demenageur-site.com\/blog\/2023\/05\/prestashop-1-7-modifier-la-liste-des-clients-du-back-office\/","title":{"rendered":"Prestashop 1.7 : modifier la liste des clients du back-office"},"content":{"rendered":"<p>Il est difficile de trouver un exemple simple pour \u00e9crire un module Prestashop 1.7 qui permette de modifier la liste des clients dans le back office Prestashop<\/p>\n<p>Voici un exemple d&rsquo;un fichier,\u00a0 pour la cr\u00e9ation d&rsquo;un module qui ajoute le champ \u00ab\u00a0groupe client\u00a0\u00bb dans le listing des clients.<\/p>\n<p>Ce n&rsquo;est pas \u00ab\u00a0parfait\u00a0\u00bb (il manque notamment un select pour les filtres) mais ce petit bout de code vous fera peut-\u00eatre gagner du temps\u00a0 !<\/p>\n<p>Bien penser \u00e0 r\u00e9initialiser le module \u00e0 chaque changement du code si vous mettez \u00e0 jour le fichier via ftp par exemple.<\/p>\n<p>Je me suis servi <a href=\"https:\/\/webkul.com\/blog\/adding-a-new-column-in-prestashop-new-symfony-admin-controller-grid-page-with-module\" target=\"_blank\" rel=\"noopener\">de ce tutoriel<\/a> \u00e9galement<\/p>\n<pre>\r\nif (!defined('_PS_VERSION_')) {\r\n    exit;\r\n}\r\nuse PrestaShop\\PrestaShop\\Core\\Grid\\Column\\Type\\DataColumn;\r\nuse PrestaShop\\PrestaShop\\Core\\Grid\\Filter\\Filter;\r\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\TextType;\r\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\ChoiceType;\r\n\r\n\r\n\/* https:\/\/webkul.com\/blog\/adding-a-new-column-in-prestashop-new-symfony-admin-controller-grid-page-with-module *\/\r\n\/* bien penser \u00e0 REINITIALISER le module \u00e0 chaque changement du code ! *\/\r\n\r\nclass CustomerGroupColumn extends Module\r\n{\r\n    public function __construct()\r\n    {\r\n        $this->name = 'customergroupcolumn';\r\n        $this->author = 'Your Name';\r\n        $this->version = '1.0.0';\r\n        $this->need_instance = 0;\r\n        $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);\r\n        $this->bootstrap = true;\r\n\r\n        parent::__construct();\r\n\r\n        $this->displayName = $this->l('Customer Group Column');\r\n        $this->description = $this->l('Adds a \"Customer Group\" column to the customer list in the back-office.');\r\n\r\n        $this->confirmUninstall = $this->l('Are you sure you want to uninstall?');\r\n    }\r\n\r\n    public function install()\r\n    {\r\n        return parent::install() &&\r\n            $this->registerHook('ActionCustomerGridDefinitionModifier')  &&\r\n            $this->registerHook('ActionCustomerGridQueryBuilderModifier') \r\n        ;\r\n    }\r\n\r\n    public function uninstall()\r\n    {\r\n        return parent::uninstall();\r\n    }\r\n\r\n    public function hookActionCustomerGridDefinitionModifier(array $params)\r\n    {\r\n        \/** @var GridDefinitionInterface $definition *\/\r\n        $definition = $params['definition'];\r\n        $definition\r\n            ->getColumns()\r\n            ->addAfter(\r\n                'lastname',\r\n                (new DataColumn('groupe'))\r\n                    ->setName(\"N\u00b0Groupe\")\r\n                    ->setOptions([\r\n                        'field' => 'groupe',\r\n                    ])\r\n            )\r\n        ;\r\n        \/\/ For search filter\r\n         \/\/ $definition->getFilters();\r\n         \/\/ dump($definition);die();\r\n\r\n        $definition->getFilters()->add(\r\n            (new Filter('groupe', TextType::class))    \/\/ChoiceType \r\n            ->setAssociatedColumn('groupe')\r\n        );\r\n         \r\n\r\n    }\r\n\r\n    \/**\r\n     * Hook allows to modify Customers query builder and add custom sql statements.\r\n     *\r\n     * @param array $params\r\n     *\/\r\n    public function hookActionCustomerGridQueryBuilderModifier(array $params)\r\n    {\r\n        \/** @var QueryBuilder $searchQueryBuilder *\/\r\n        $searchQueryBuilder = $params['search_query_builder'];\r\n        \/** @var CustomerFilters $searchCriteria *\/\r\n        $searchCriteria = $params['search_criteria'];\r\n        $searchQueryBuilder->addSelect(\r\n            ' CONCAT( cg.id_group , \"-\",  cgl.name)  AS `groupe`'\r\n        );\r\n\r\n        \/\/ dump($searchQueryBuilder);die;\r\n        $searchQueryBuilder->leftJoin(\r\n            'c',\r\n            '`' . pSQL(_DB_PREFIX_) . 'customer_group`',\r\n            'cg',\r\n            'cg.`id_customer` = c.`id_customer`'\r\n        );\r\n        \r\n        $searchQueryBuilder->leftJoin(\r\n            'cg',\r\n            '`' . pSQL(_DB_PREFIX_) . 'group_lang`',\r\n            'cgl',\r\n            'cgl.`id_group` = cg.`id_group` and cgl.id_lang=1'\r\n        );\r\n\r\n        if ('groupe' === $searchCriteria->getOrderBy()) {\r\n            $searchQueryBuilder->orderBy('cg.`id_group`', $searchCriteria->getOrderWay());\r\n        }\r\n        foreach ($searchCriteria->getFilters() as $filterName => $filterValue) {\r\n            if ('groupe' === $filterName) {\r\n                $searchQueryBuilder->andWhere('cg.`id_group` = :groupe');\r\n                $searchQueryBuilder->setParameter('groupe', $filterValue);\r\n                if (!$filterValue) {\r\n                    $searchQueryBuilder->orWhere('cg.`id_group` IS NULL');\r\n                }\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n \r\n}\r\n\r\n\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Il est difficile de trouver un exemple simple pour \u00e9crire un module Prestashop 1.7 qui permette de modifier la liste des clients dans le back office Prestashop Voici un exemple d&rsquo;un fichier,\u00a0 pour la cr\u00e9ation d&rsquo;un module qui ajoute le<span class=\"ellipsis\">&hellip;<\/span><\/p>\n<div class=\"read-more\"><a href=\"https:\/\/www.demenageur-site.com\/blog\/2023\/05\/prestashop-1-7-modifier-la-liste-des-clients-du-back-office\/\">Lire la suite &#8250;<\/a><\/div>\n<p><!-- end of .read-more --><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[],"class_list":["post-694","post","type-post","status-publish","format-standard","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/posts\/694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/comments?post=694"}],"version-history":[{"count":8,"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/posts\/694\/revisions"}],"predecessor-version":[{"id":702,"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/posts\/694\/revisions\/702"}],"wp:attachment":[{"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/media?parent=694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/categories?post=694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.demenageur-site.com\/blog\/wp-json\/wp\/v2\/tags?post=694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}