jujutte24 Posted January 23, 2013 Share Posted January 23, 2013 Bonjour la communauté je rencontre un petit souci sur mes restrictions par groupes et par catégories. J'ai créé des groupes après avoir créé mes catégories, et par défaut, ces catégories ne sont pas visibles de mes nouveaux groupes. Existe-t-il une méthode (voir une requête sql) pour que toutes les catégories soient attribuées à tous les groupes ? Merci de votre aide Link to comment Share on other sites More sharing options...
jujutte24 Posted January 31, 2013 Author Share Posted January 31, 2013 Help ! pas d'idée ? Link to comment Share on other sites More sharing options...
jujutte24 Posted February 8, 2013 Author Share Posted February 8, 2013 Un petit coup de pouce serai bienvenue.... Link to comment Share on other sites More sharing options...
jujutte24 Posted February 9, 2013 Author Share Posted February 9, 2013 En fait, je cherche un peu d'aide, pour rédiger une requête SQL. Je pense que c'est le meilleur moyen. Comment faire pour que dans la table category_group, je puisse attribuer à toutes les catégories tous les groupe ? si quelqu'un a une idée.... Link to comment Share on other sites More sharing options...
jujutte24 Posted February 14, 2013 Author Share Posted February 14, 2013 J'ai trouvé quelques codes, mais je ne sais pas si ils sont à adapter... voci quelques bouts de codes trouvés sur le forum Italien : <html> <head> </head> <body> <?php if(isset($_POST['submit'])) { $inviato=$_POST['submit']; } else { $inviato=""; } if ($inviato == "SUBMIT") { if(isset($_POST['host'])) { $host=trim($_POST['host']); } else { $host=""; } if(isset($_POST['username'])) { $nome_utente=trim($_POST['username']); } else { $nome_utente=""; } if(isset($_POST['password'])) { $password=trim($_POST['password']); } else { $password="";$password=""; } if(isset($_POST['db_name'])) { $nome_db=trim($_POST['db_name']); } else { $nome_db=""; } if(isset($_POST['id_group'])) { $id_group=trim(htmlentities($_POST['id_group'],ENT_QUOTES)); } else { $id_group=""; } if($host == "") { die("<b>Error! Host is required.</b> <a href=''>Try again</a>"); } if($nome_utente == "") { die("<b>Error! Username is required.</b> <a href=''>Try again</a>"); } if($nome_db == "") { die("<b>Error! Database name is required.</b> <a href=''>Try again</a>"); } if($id_group == "") { die("<b>Error! Customer Group ID is required.</b> <a href=''>Try again</a>"); } // Mi connetto al database e cerco la tabella $connessione = mysql_connect($host, $nome_utente, $password)or die("<b>Error! MySQL connection:</b> " . mysql_error()); mysql_select_db($nome_db, $connessione) or die("<b>Error! MySQL database selection</b>"); $query_cancella = "DELETE FROM ps_category_group WHERE id_group = '$id_group'"; $result_cancella = mysql_query($query_cancella) or die(mysql_error()); $query = "SELECT * FROM ps_category"; $result = mysql_query($query) or die(mysql_error()); while ($array=mysql_fetch_assoc($result)) { $id_categoria = $array['id_category']; $query_insert = "INSERT INTO ps_category_group VALUES('$id_categoria', '$id_group')"; $result_insert = mysql_query($query_insert) or die(mysql_error()); echo "<br>Category $id_categoria updated"; } // chiudo while } else { ?> <b>This script is secure and fully tested with Prestashop 1.4.x versions. However I suggest to backup your database!</b> <p /> <form method="post" action=""> <b>MySQL connection</b><br /> Host: <input type="text" name="host" value="" /><br /> Username: <input type="text" name="username" value="" /><br /> Password: <input type="text" name="password" value="" /><br /> Database name: <input type="text" name="db_name" value="" /><br /> <p /> CUSTOMERS GROUP ID: <input type="text" name="id_group" value="" />it must be already created! <p> <input type="submit" name="submit" value="SUBMIT" /> </form> <?php } ?> </body> </html> et un autre proposé sur le forum Anglais : <?php require(dirname(__FILE__).'/config/config.inc.php'); $new_group = 4; // there is ID of new group $categories = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT DISTINCT c.* FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.(int)Context::getContext()->language->id.') '); foreach($categories as $category){ $categoryObj = new Category($category['id_category'], (int)Context::getContext()->language->id); $categoryObj->addGroups(array($new_group)); } Vous en pensez quoi ? Link to comment Share on other sites More sharing options...
jujutte24 Posted February 15, 2013 Author Share Posted February 15, 2013 Ben alors, personne ne s'intéresse aux groupe de client ? Je rappel que si vous créez des groupes de clients après avoir créé des catégories, ces dernières ne leur sont pas visible. C'est tout de même un Bug ça non ? Pourquoi ne peut-on pas choisir, lors de création par CSV de catégories, les groupes par lesquels elles doivent être visible ? Link to comment Share on other sites More sharing options...
Jovicyr Posted March 29, 2013 Share Posted March 29, 2013 Bonjour, Je rencontre exactement le même souci sous Prestashop 1.5.3 : lorsque je crée un nouveau groupe client, celui-ci n'est affecté par défaut à aucune catégorie. Ainsi, un client affecté uniquement à ce nouveau groupe ne vois aucune catégorie en FO. jujutte24, as-tu trouvé la solution ? Une requête SQL serait peut-être la bienvenue mais ne résoudrait pas le problème dans la durée puisqu'à chaque nouveau groupe créé, il faudrait la faire tourner. Mais bon, ce serait déjà bien ;-) Merci d'avance, Link to comment Share on other sites More sharing options...
jhb13 Posted March 29, 2013 Share Posted March 29, 2013 Bonjour, Si vous avez créé les groupes après les catégories, il vous faut simplement modifier toutes vos catégories en les réouvrant et en pied de formulaire, vous devez renseigner "Accès groupes" A+ Link to comment Share on other sites More sharing options...
jujutte24 Posted March 29, 2013 Author Share Posted March 29, 2013 Ok, pour les ré-ouvrir, mais quand on en a 5000 ? J'ai trouvé des codes php, mais ce qui me plairai c'est que quelqu'un de qualifié y jette un oeil.... c'est complètement hors de mes compétences... Link to comment Share on other sites More sharing options...
jhb13 Posted March 30, 2013 Share Posted March 30, 2013 Bonjour, 5000 catégories ? Ce n'est pas un peu trop... Là, on parle de catégories, pas d'articles... Il y a peut-être moyen de regrouper un peu. Comment fait un client pour s'y retrouver dans une liste de 5000 catégories ? A+ Link to comment Share on other sites More sharing options...
MathieuB Posted March 30, 2013 Share Posted March 30, 2013 (edited) avec un index de catégorie ...?! jujutte24 cherche une solution de traitement de l'information et avait à mon avis déjà constaté la possibilité de modifier chaque catégorie. Personnellement je suis aussi gêné par cela pour une boutique privé avec plus de 6000 catégories et 2 groupes. Je vais me pencher dessus de deux façons 1)une requête pour mettre à jour toutes mes catégories existante 2)modifier la fonction de création de catégorie pour que celle-ci viennent associer la catégorie crée à tous les groupes existant au travers d'un override ! je posterai la solution ici dans la semaine étant en vacance! étant en version hybride 1.4.5.1/1.4.9 avec de nombreux patchs du svn je ne garantie pas que ma solution sera satisfaisante pour vous ! Edited March 30, 2013 by MathieuB (see edit history) Link to comment Share on other sites More sharing options...
jujutte24 Posted March 30, 2013 Author Share Posted March 30, 2013 Salut, à vrai dire j'ai plus de 6000 catégories et pas loin de 100000produits, mais bon. Le problème c'est que manuellement c'est mission impossible. En effet Mathieu, sql, mais le problème c'est qu'une requète SQL ne peut pas "trier". Il faut passer par php...comme plus haut, tu as vu il y a des codes que j'ai placé. "une requête pour m'être à jour toutes mes catégories existante" semble le plus efficace, mais je n'y connait rien en PHP....et le premier fichier du haut est en Italien... De fait, j'ai presta 1.4.6.2, je pense que nos 2 versions sont compatible, et si tu arrive à trouver une solution simple, légère et efficace je te baise la pieds Je galère avec ça.... Et en plus aucun modérateur Presta passe dans le coin, c'est quant même un réel problème. Même en créant en 1er les groupes et en 2ème les catégories, il n'y a que le défaut qui est coché... C'est tout de même bête ! non ? Link to comment Share on other sites More sharing options...
MathieuB Posted April 1, 2013 Share Posted April 1, 2013 (edited) Hum bon j'avais fait quelque chose de très détaillé et d'explicatif sur ce manque malheureusement firefox à planté avant que je n'ajoute ma réponse...Et le système de sauvegarde des messages ne fait pas encore de miracle ! donc je vais faire simple : 1 => phpmyadmin exporter vos id de category de la table category_group associé au groupe par défaut (et donc pas aux autres) en prenant soin d'exclure la catégorie d'id 1 qui elle, est tjrs associé à l'ensemble des groupes 2 => exporter le résultat au format csv via phpmyadmin > corriger dans excel pour générer vos requêtes d'INSERT sur les groupes d'id manquant. 3 => importer les lignes de requêtes dans phpmyadmin pour corriger les catégories existantes 4=> implémenter cet override Category.php dans override/classes le groupBox étant un tableau d'id des groupes auquels seront associer les catégories il faut donc renseigner les id des groupes auquels vous souhaitez voir associer toute nouvelle catégorie importé. en prenant soin de tjrs conserver l'id du groupe par défaut (1) si l'on a une catégorie A a associer au groupe par défaut et au groupe BonClients d'id 3 cela donne : <?php class Category extends CategoryCore { public $groupBox = array(1,3); } ne modifier pas le cœur de prestashop cela rend très difficile pour tout intervenant sur la boutique la consultation des modifications réalisées, ainsi que la mise à jour de la boutique, ou l'implémentation de fonctionnalité en tenant compte de vos ajouts. Pour la requête SQL si vous êtes novice on peut voir ça en MP pour ne pas polluer le topic puis vous la publierait ici afin d'aider les autres personnes. Et pour vos imports et visualiser votre catalogue en un coup d’œil pensez à Storecommander même en version SC FREE ça aide ! Pour Jbh13, je ne travail pas encore sur 1.5. Mais dans 1.4 j'y ai jeté un œil c'est la classe Category.php et la fonction : setNewGroupForHome qui permet lorsqu'on crée un nouveau groupe de client d'avoir systématiquement la catégorie accueil(Home) d'associé à ce groupe. Il faut donc la corriger pour qu'elle implémente cela à l'ensemble des catégories existante avec une boucle par exemple qui irait chercher l'ensemble des id des categories de votre base. voici le code de la fonction : public static function setNewGroupForHome($id_group) { if (!(int)($id_group)) return false; return Db::getInstance()--->Execute(' INSERT INTO `'._DB_PREFIX_.'category_group` VALUES (1, '.(int)($id_group).') '); } que vous retrouvez appelé dans la création de groupe au sein de la classe group.php : public function add($autodate = true, $nullValues = false) { return parent::add() && Category::setNewGroupForHome((int)($this->id)); } Deux possibilités : soit modifier cette fonction setNewGroupeForHome Soit ajouter l’appel à votre propre fonction SetNewGroupeForAllCategories par exemple avec un override ayant une boucle qui irait chercher l'ensemble des id des categories prestashop et réaliser l'insert sur l'id du nouveau groupe crée pour l'ensemble des id des catégories qui existent. ça demande un peu de développement mais si ça n'est pas sur 1.5 c'est vraiment moche...faites un rapport sur le bugtracker afin qu'il corrige lors du prochain patch ou alors vous aurez une correction sur la version SVN rapidement que vous pourrez mettre en place. Sinon un développeur doit pouvoir vous faire ça pour pas très cher avec une fonction pour ajouter le groupe crée aux modules de paiement existant. Mais avant ça posé vous la question de savoir si cet outil est nécessaire, généralement lorsqu'on crée un site les groupes de clients sont crées au départ sauf oublie (que vous pourrez corriger avec la mise à jour par requête SQL que je décris au début de ce post) Donc a moins que vous ayez des nouveaux groupes de clients à créer régulièrement ça n'a pas d’intérêt de passer du temps sur ce développement. Category.php Edited April 1, 2013 by MathieuB (see edit history) Link to comment Share on other sites More sharing options...
jujutte24 Posted April 12, 2013 Author Share Posted April 12, 2013 Bon, désolé pour le retard dans la réponse...boulot boulot En fait cette solution me semble sympa. Si je résume, j'exporte ma table en CSV, je la modifie, et je la réintègre en CSV, tout simplement ? Et du coup je place ce fichier "category.php" dans le dossier override/classes ? En fait rien de plus simple.... Je me trompe ? Link to comment Share on other sites More sharing options...
jujutte24 Posted April 22, 2013 Author Share Posted April 22, 2013 Bon, j'ai exporté la table, modifié les champs et réimporter et...... ça marche !!!! Donc, export de la table "category_group" au format CSV, via phpmyadmin, modification dans Excel,, j'ai vidé la table (pas supprimer !) et insérer la table modifiée. Nickel, ça m'a débloqué toutes les catégories pour tous les groupes. Maintenant je vais me charger de l'override, bien que ce soit la partie la plus "compliquée" pour moi. Mais c'est déjà une bonne nouvelle La suite très bientôt ! Link to comment Share on other sites More sharing options...
ShowYou Posted October 28, 2013 Share Posted October 28, 2013 Bonjour, Une solution a-t-elle été trouvée pour 1.5.6 car cela devient vite compliquée quand on a beaucoup de catégorie et plusieurs boutiques auxquelles on attribut des groupes différents.... Link to comment Share on other sites More sharing options...
Azimov Posted November 14, 2013 Share Posted November 14, 2013 Le post date d'un mois, mais comme j'ai été confronter au même problème, voilà un script pour associer les groupes aux catégories. <?php //dbconf ///////////////////////////////////////////////////// CONFIG $host ='hote (généralement localhost)'; $db ='base de donnée'; $dbuser ='utilisateur de la base de donnée'; $dbpass ='mot de passe de la base de donnée'; $prefix ='prefix (ps_ de base)'; ///////////////////////////////////////////////////// $groups = array(); $cat = array(); //prepare db object $pdo = new PDO('mysql:host='.$host.';dbname='.$db,$dbuser, $dbpass); //get categories $query = 'SELECT id_category FROM '.$prefix.'category;'; $result = $pdo->query($query); while($row = $result->fetchObject()) $cat[]=$row->id_category; //get groups $query = 'SELECT id_group FROM '.$prefix.'group;'; $result = $pdo->query($query); while($row = $result->fetchObject()) $groups[]=$row->id_group; //write cat_group insert $query = 'INSERT INTO '.$prefix.'category_group(id_category,id_group) VALUE'; foreach ($cat as $category) { foreach ($groups as $key => $group) { $query .='("'.$category.'","'.$group.'"),'; } } $query = substr($query , 0, -1).';'; //clear cat_group $delquery = 'DELETE FROM '.$prefix .'category_group WHERE 1;'; $result = $pdo->exec($delquery); //fill cat_group $result = $pdo->exec($query); ?> Pour l'utiliser: 1. Enregistrer le script dans un fichier portant l'extension ".php". 2. changer la configuration ($host,$db,$dbuser,$dbpass,$prefix). 3. transférer le fichier sur le serveur dans un dossier accessible depuis un navigateur. 4. appeler le fichier dans un navigateur. Je vous conseil de faire une sauvegarde de la table category_group avant, au cas où... 1 Link to comment Share on other sites More sharing options...
SITOLOG - F Bugnet Posted November 15, 2013 Share Posted November 15, 2013 Bonjour, La mise en place et exécution d'un script n'étant pas forcément à la porté de tout le monde, sachez que PrestaCatégories permet d'associer en masse des sélections de catégories à des sélections de groupes de clients, en un clic. Comme c'est un module payant, je vous renvoie sur le bon forum: http://www.prestashop.com/forums/topic/93799-module-application-prestacategories-pour-creer-cloner-deplacer-activer-les-categories-et-le-produits/?hl=%2Bprestacategories&do=findComment&comment=1262536 Crdlt Franck Link to comment Share on other sites More sharing options...
h webmaster Posted October 26, 2017 Share Posted October 26, 2017 (edited) Bonjour, j'ai essayé ton script on local sur version prestashop 1.6.1 mais il m'affiche une erreur a la ligne 21 Fatal error: Call to a member function fetchObject() on boolean in C:\wamp64\www\TEST.php on line 21 On 14/11/2013 at 2:18 PM, Azimov said: Le post date d'un mois, mais comme j'ai été confronter au même problème, voilà un script pour associer les groupes aux catégories. <?php //dbconf ///////////////////////////////////////////////////// CONFIG $host ='hote (généralement localhost)'; $db ='base de donnée'; $dbuser ='utilisateur de la base de donnée'; $dbpass ='mot de passe de la base de donnée'; $prefix ='prefix (ps_ de base)'; ///////////////////////////////////////////////////// $groups = array(); $cat = array(); //prepare db object $pdo = new PDO('mysql:host='.$host.';dbname='.$db,$dbuser, $dbpass); //get categories $query = 'SELECT id_category FROM '.$prefix.'category;'; $result = $pdo->query($query); while($row = $result->fetchObject()) $cat[]=$row->id_category; //get groups $query = 'SELECT id_group FROM '.$prefix.'group;'; $result = $pdo->query($query); while($row = $result->fetchObject()) $groups[]=$row->id_group; //write cat_group insert $query = 'INSERT INTO '.$prefix.'category_group(id_category,id_group) VALUE'; foreach ($cat as $category) { foreach ($groups as $key => $group) { $query .='("'.$category.'","'.$group.'"),'; } } $query = substr($query , 0, -1).';'; //clear cat_group $delquery = 'DELETE FROM '.$prefix .'category_group WHERE 1;'; $result = $pdo->exec($delquery); //fill cat_group $result = $pdo->exec($query); ?> Pour l'utiliser: 1. Enregistrer le script dans un fichier portant l'extension ".php". 2. changer la configuration ($host,$db,$dbuser,$dbpass,$prefix). 3. transférer le fichier sur le serveur dans un dossier accessible depuis un navigateur. 4. appeler le fichier dans un navigateur. Je vous conseil de faire une sauvegarde de la table category_group avant, au cas où... Merci Edited October 26, 2017 by h webmaster (see edit history) Link to comment Share on other sites More sharing options...
marcoooo Posted January 5, 2018 Share Posted January 5, 2018 SI vous avez accès à votre MYSQL il est tout de même plus simple de faire tourner ce petit SQL REPLACE INTO [VOTREPREFIXE]_category_group (id_category,id_group) SELECT id_category AS id_category, id_group AS id_group FROM [VOTREPREFIXE]_category, [VOTREPREFIXE]_group ORDER BY id_category, id_group Les lignes n'existant pas seront créées, les autres ignorées. Link to comment Share on other sites More sharing options...
h webmaster Posted January 5, 2018 Share Posted January 5, 2018 Thank you Link to comment Share on other sites More sharing options...
Eolia Posted January 18, 2018 Share Posted January 18, 2018 Ou faire un hack de Presta 1 Link to comment Share on other sites More sharing options...
Grafyx89 Posted April 16, 2018 Share Posted April 16, 2018 On 05/01/2018 at 10:37 AM, marcoooo said: SI vous avez accès à votre MYSQL il est tout de même plus simple de faire tourner ce petit SQL REPLACE INTO [VOTREPREFIXE]_category_group (id_category,id_group) SELECT id_category AS id_category, id_group AS id_group FROM [VOTREPREFIXE]_category, [VOTREPREFIXE]_group ORDER BY id_category, id_group Les lignes n'existant pas seront créées, les autres ignorées. Bonjour, Il s'agit bien d'une requête pour activer tout les groupes sur toutes les catégories/sous-cat ? Merci, 1 Link to comment Share on other sites More sharing options...
Grafyx89 Posted April 18, 2018 Share Posted April 18, 2018 up ? Link to comment Share on other sites More sharing options...
John Posted June 7, 2018 Share Posted June 7, 2018 Le 18/01/2018 à 6:31 PM, Eolia a dit : Ou faire un hack de Presta @eolia .comment tu as fait ca? impossible de trouver un tuto qui décrive ce que tu nous montre. merci d avance Link to comment Share on other sites More sharing options...
Eolia Posted June 8, 2018 Share Posted June 8, 2018 Ajouter un peu de code dans l'AdminGroupController: Link to comment Share on other sites More sharing options...
rachel01 Posted June 26, 2018 Share Posted June 26, 2018 On 08/06/2018 at 7:42 AM, Eolia said: Ajouter un peu de code dans l'AdminGroupController: Cela a t-il marché pour vous ? Car j'ai mis ce code dans le fichier AdminGroupController.php, j'ai bien le bouton qui s'affiche mais quand je sélectionne OUI sur un groupe et que j'enregistre, les catégories ne sont pas affectées. De plus, en retournant dans ce même groupe, j'ai le curseur sur NON (bien que j'ai mis OUI et enregistré juste avant) Une idée ? Merci Link to comment Share on other sites More sharing options...
Eolia Posted June 26, 2018 Share Posted June 26, 2018 Version Prestashop ? C'est normal que le bouton revienne sur non après avoir enregistré, c'est son réglage par défaut. Link to comment Share on other sites More sharing options...
rachel01 Posted June 26, 2018 Share Posted June 26, 2018 3 hours ago, Eolia said: Version Prestashop ? C'est normal que le bouton revienne sur non après avoir enregistré, c'est son réglage par défaut. Version de PrestaShop 1.6.1.18 Link to comment Share on other sites More sharing options...
Eolia Posted June 26, 2018 Share Posted June 26, 2018 Je viens de tester sur une 1.6.1.18 native, cela fonctionne. D'ailleurs ce code fonctionne chez tous mes clients depuis plusieurs années. Avez-vous des overrides sur les controleurs ou classes ? Ou alors un cache serveur ? il reste éventuellement la possibilité d'une faute de syntaxe dans la requête sql ? Link to comment Share on other sites More sharing options...
rachel01 Posted June 27, 2018 Share Posted June 27, 2018 16 hours ago, Eolia said: Je viens de tester sur une 1.6.1.18 native, cela fonctionne. D'ailleurs ce code fonctionne chez tous mes clients depuis plusieurs années. Avez-vous des overrides sur les controleurs ou classes ? Ou alors un cache serveur ? il reste éventuellement la possibilité d'une faute de syntaxe dans la requête sql ? Bonjour, Pas d'override en particulier. Voici le code que j'ai mis, je ne pense pas avoir fait d'erreur de syntaxe (j'ai juste remplacé le ps_ par DB_PREFIX car je n'ai pas le même préfixe) : protected function access_all() { $id_group = (int)Tools::getValue('id_group'); $assign_to_all = (bool)Tools::getValue('all_cat'); if($assign_to_all && $id_group) Db::getInstance()->execute(' INSERT IGNORE INTO ‘'._DB_PREFIX_.'category_group‘ (id_category, id_group) SELECT DISTINCT id_category, '.$id_group.' FROM ‘'._DB_PREFIX_.'category‘ WHERE id_parent != 0 '); } Merci encore de votre aide Link to comment Share on other sites More sharing options...
Eolia Posted June 27, 2018 Share Posted June 27, 2018 il y a 9 minutes, rachel01 a dit : ‘ Pas sur de ce caractère... Quel éditeur utilisez-vous ? Le code correct serait plutôt celui-ci: protected function access_all() { $id_group = (int)Tools::getValue('id_group'); $assign_to_all = (bool)Tools::getValue('all_cat'); if($assign_to_all && $id_group) { Db::getInstance()->execute(' INSERT IGNORE INTO `'._DB_PREFIX_.'category_group` (id_category, id_group) SELECT DISTINCT id_category, '.$id_group.' FROM `'._DB_PREFIX_.'category` WHERE id_parent != 0 '); } } Link to comment Share on other sites More sharing options...
rachel01 Posted June 27, 2018 Share Posted June 27, 2018 Merci beaucoup cela a fonctionné ! Quel gain de temps ! Link to comment Share on other sites More sharing options...
Eolia Posted June 27, 2018 Share Posted June 27, 2018 Un conseil: changez d'éditeur de texte^^ Link to comment Share on other sites More sharing options...
XGM Posted April 17, 2019 Share Posted April 17, 2019 Bonjour, Je tente d'appliquer cette modification sur la version 1.7.5.1 de PrestaShop, cependant j'ai une erreur, voici mon code (je ne pense pas avoir fait d'erreur) : (Je précise que je connais pas grand chose dans le code php 😊 ) array( 'type' => 'switch', 'label' => $this->1('Assign to all categories'), 'name' => 'all_cat', 'required' => false 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'all_cat_on', 'value' => 1, 'label' => $this->1('Enabled') ), array( 'id' => 'all_cat_off', 'value' => 0, 'label' => $this->1('Disabled') ) ), 'hint' => $this->1('Customers in this group can access to all categories. Leave on "NO" if you want to assign them manually') ), protected function access_all() { $id_group = (int)Tools::getValue('id_group'); $assign_to_all = (bool)Tools::getValue('all_cat'); if($assign_to_all && $id_group) { Db::getInstance()->execute(' INSERT IGNORE INTO `ps_category_group` (id_category, id_group) SELECT DISTINCT id_category, '.$id_group.' FROM `ps_category` WHERE id_parent != 0 '); } } Link to comment Share on other sites More sharing options...
Eolia Posted April 17, 2019 Share Posted April 17, 2019 $this->1 ca ne risque pas de fonctionner ce n'est pas un 1 mais un l (la lettre L) $this->l Link to comment Share on other sites More sharing options...
XGM Posted April 17, 2019 Share Posted April 17, 2019 Merci pour votre réponse rapide, mais j'ai une autre erreur : (cette fois c'est bien la lettre T en minuscule ?) Link to comment Share on other sites More sharing options...
Eolia Posted April 17, 2019 Share Posted April 17, 2019 oui mais il manque une virgule à la fin de la ligne du dessus^^ Link to comment Share on other sites More sharing options...
XGM Posted April 17, 2019 Share Posted April 17, 2019 Merci pour ton aide, j'ai fini de remplacer les 1 par l et ajouter la virgule, tout s'affiche correctement dans le backoffice, je sélectionne "OUI" et clique sur enregistrer mais rien ne change j'ai vérifié dans PhpMyAdmin ma table s'appelle bien ps_category_group et mes en-tête id_category & id_group Au cas où j'aurais encore fait une bêtise voici le code : protected function access_all() { $id_group = (int)Tools::getValue('id_group'); $assign_to_all = (bool)Tools::getValue('all_cat'); if($assign_to_all && $id_group) { Db::getInstance()->execute(' INSERT IGNORE INTO `ps_category_group` (id_category, id_group) SELECT DISTINCT id_category, '.$id_group.' FROM `ps_category` WHERE id_parent != 0 '); } } Link to comment Share on other sites More sharing options...
Eolia Posted April 17, 2019 Share Posted April 17, 2019 Peut-être que ce qui est envoyé sur cette page est différent sur la 1.7. On va mettre un debug pour voir ce qui est envoyé. Modifiez le code comme suit au début de la fonction: protected function access_all() { p($_GET); d($_POST); ... n'enregistrez pas encore le fichier. Allez dans la page, sélectionner Oui pour le bouton Assign to all categories, enregistrez le fichier maintenant et cliquez sur "Enregistrer" en bas de page et donnez-moi ce qui s'affiche. Ensuite, supprimez ces 2 lignes et ré-enregistrez le fichier. Link to comment Share on other sites More sharing options...
XGM Posted April 17, 2019 Share Posted April 17, 2019 En suivant ces indication rien ne change, l'enregistrement se fait et je n'ai rien qui s'affiche, le code est-il correct ? protected function access_all() { p($_GET); d($_POST); $id_group = (int)Tools::getValue('id_group'); $assign_to_all = (bool)Tools::getValue('all_cat'); if($assign_to_all && $id_group) { Db::getInstance()->execute(' INSERT IGNORE INTO `ps_category_group` (id_category, id_group) SELECT DISTINCT id_category, '.$id_group.' FROM `ps_category` WHERE id_parent != 0 '); } } Link to comment Share on other sites More sharing options...
Eolia Posted April 17, 2019 Share Posted April 17, 2019 Ah... p() et d() n'existent plus en 1.7... remplacez par var_dump($_GET); die(var_dump($_POST)); Link to comment Share on other sites More sharing options...
XGM Posted April 17, 2019 Share Posted April 17, 2019 Je n'ai toujours rien, cependant mon problème est résolu car je viens d'essayer la requête SQL cité plus haut, j'avais un peu peur des conséquences d'une mauvaise syntaxe mais tous s'est bien passé Par contre si un jour tu fait un module Prestashop avec ce paramètre je suis preneur, sauf si Prestashop se décide d'ici la à mettre cette fonctionnalité en place Je pense que je ne serait pas le seul à le prendre Link to comment Share on other sites More sharing options...
WaxDev Posted October 29, 2020 Share Posted October 29, 2020 Bonjour, Au cas où quelqu'un d'autre est à la recherche, il existe bien un module sur le store de Prestashop qui permet de faire ça et de gérer ce genre de besoin 😉 : https://addons.prestashop.com/fr/gestion-clients/48181-gestion-acces-des-groupes-client-aux-categories-produit.html (Pour PS 1.7 et 1.6) Link to comment Share on other sites More sharing options...
Eolia Posted October 30, 2020 Share Posted October 30, 2020 Excellent les gens qui viennent piquer le code offert sur le forum pour en faire des modules payants plutôt que de tenter d'aider... Ce que vous avez gagné c'est qu'à présent vous inventerez votre code tout seul car je n'en posterai plus en public^^ 2 Link to comment Share on other sites More sharing options...
WaxDev Posted October 30, 2020 Share Posted October 30, 2020 (edited) Il y a plus dans ce module qu'un code similaire au votre à mon avis, et les gens ne sont pas obligé de l'acheter étant donné que votre code reste disponible et gratuit sur ce forum Il faut juste penser aussi aux utilisateurs de Prestashop qui ne sont pas développeurs et qui cherchent plutôt une façon simple de gérer ce genre de soucis sans avoir à trifouiller dans le code. Ce genre de module offre simplement une alternative plus facile pour aider les non initiés au code je pense. Alternative certes payante, mais pas obligatoire Edited October 30, 2020 by WaxDev (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted August 25, 2021 Share Posted August 25, 2021 Salut, je viens de faire l'adaptation pour Prestashop 1.7 avant qu'une autre solution soit intégré directement par PretaShop dans une prochaine version : https://www.mediacom87.fr/comment-associer-automatiquement-toutes-les-categories-a-un-nouveau-groupe-client-sur-prestashop-17/ PS : Merci @Eolia pour le code de la 1.6 que je n'ai fais qu'adapter. Link to comment Share on other sites More sharing options...
arnaud19100 Posted April 14, 2023 Share Posted April 14, 2023 Merci pour le partage du code, j'ai ajouté dans la function processSave() $this->access_all_cat($object); pour que sa fonctionne sur mon Presta 1.7.7 Ici l'ensemble du code > https://github.com/arnaud-izzi/Attribuer-toutes-les-cat-gories-tous-les-groupes Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now