Ben S. Posted December 23, 2009 Share Posted December 23, 2009 Bonjour, Je me tourne vers tous les experts de la plateforme prestashop ayant déjà adapté le comportement de Prestashop à leur besoin.Pour mon projet, j'ai apporté quelques modifications à Prestashop afin de rendre le catalogue de la boutique gérable par différents fournisseurs.Pour résumer, je souhaite rassembler des produits de différents fournisseurs dans la même boutique et j'ai besoin que chaque fournisseur puisse gérer ses propres produits dans ma boutique. J'ai simplement créé une table supplémentaire pour enregistrer les associations entre les comptes utilisateurs et les produits créés afin que chaque fournisseur ne puisse voir, ajouter et modifier QUE ses propres produits dans la partie "Catalogue". J'ai donc modifié les fichiers suivants :AdminCategories.phpAdminCatalog.phpAdminProducts.phpMes modifs sont vraiment mineures et se basent sur l'ID utilisateur récupéré en cookie : - un fournisseur n'a plus la possibilité d'éditer les catégories de produit - la liste des produits n'affiche QUE les produits que le fournisseur a lui-même créé. - Lors de l'ajout d'un produit, un enregistrement est créé dans ma nouvelle table pour associer son id_employee à l'id_product nouvellement crééMaintenant que cela fonctionne, je cherche à rendre cette fonctionnalité publique et surtout pérenne car lors des prochaines mises à jour de prestashop, je suppose que toutes ces modifs vont être écrasées par les nouveaux fichiers de la mise à jour... C'est là que j'ai besoin de votre expérience : est-ce que je dois créer un "module", un "hook", un "patch" ou que sais-je... comment faire pour que lors de la prochaine mise à jour, mon code puisse continuer à fonctionner ?Je peux vous décrire en détails les modifications apportées si vous le souhaitez, mais j'ai surtout besoin d'éclaircissements vis à vis du mode de fonctionnement de prestashop sur ce problème de la pérennité des modifications de code et je ne trouve rien de concret sur le site internet, la doc "développeur" n'étant pas encore rédigée.Merci d'avance pour votre aide. Link to comment Share on other sites More sharing options...
easybizness Posted December 23, 2009 Share Posted December 23, 2009 WaouhhhC'est exactement ce que je recherche.Pourriez vous nous détailler comment vous avez fait pour arriver à ce résultat?CELA M'INTERESSE AU PLUS HAUT POINT.Pour les conseils que vous demandez je vous conseille de rechercher les membres suivants qui ont de grandes compétences:Sotew, Joel gaujard, Julien breux, dupont communication (sylvain).Je pense que chacun d'eux pourront vous répondre. Link to comment Share on other sites More sharing options...
SotEW Posted December 23, 2009 Share Posted December 23, 2009 Voici ma réponse :Vu les trois fichiers en questions, il s'agit bien d'une modification des fichers noyaux de prestashop, on ne peut pas parler ici de module. La solution que je préconise est la suivante :Créé un dossier dans lequel tu met le svn de prestashop (tuto à la fin de cette page : http://www.prestashop.com/en/downloads/).Effectues-y tes modifications (mais garde les biens de cotés, évidemment.)Garde ce répertoire souvent à jour, et tortoise te préviendra s'il y a eu une modification d'un de tes fichiers dans la nouvelle version. A toi alors de vérifier que tes modifications sont toujours d'actualités.SotEW Link to comment Share on other sites More sharing options...
Ben S. Posted December 23, 2009 Author Share Posted December 23, 2009 Arf, et il n'y aucune façon de "surcharger" le fonctionnement de ces fonctions ?J'ai testé de créer par exemple un onglet AdminCatalogPerso qui hériterait directement de AdminCatalog afin de ne modifier que les méthodes voulues, mais j'ai galéré et ne suis jamais arrivé à faire fonctionner ça comme je voulais.Je trouve ça bizarre que l'on ne puisse pas faire ça plus proprement : j'ai l'impression qu'il y a des tas de modules 100 fois plus complexes que ce que j'ai fait... mais bon... tant pis sinon.Peut-être dois-je faire mes modifs d'une autre manière, moi j'y connais pas grand chose en prestashop ?? Link to comment Share on other sites More sharing options...
SotEW Posted December 23, 2009 Share Posted December 23, 2009 Si, la solution serais de faire un clone du tab dans un module et de demander de passer par le module pour gérer les produits Link to comment Share on other sites More sharing options...
Ben S. Posted December 23, 2009 Author Share Posted December 23, 2009 Euh... je crois comprendre, mais le clone on peut le faire comment ?Si c'est via un copier-coller, on aura le toujours un problème après mise à jour de PS.De toutes façons c'est trop compliqué pour moi : je comprend pas grand choses aux "modules" pour l'instant, je vois pas du tout comment "cloner un tab dans un module"... Link to comment Share on other sites More sharing options...
easybizness Posted December 23, 2009 Share Posted December 23, 2009 Hello Ben S. comme je t'ai expliqué precedemment je voudrais arriver au même résultat que toi.Pourrais tu me fournir les modifications comme tu l'as si gentillement proposé ????Merci d'avance,Vincent Link to comment Share on other sites More sharing options...
easybizness Posted December 24, 2009 Share Posted December 24, 2009 un petit UP !!! merci beaucoup!! Link to comment Share on other sites More sharing options...
akrem Posted December 24, 2009 Share Posted December 24, 2009 Bnjour ,moi aussi ça m'interesse au plus haut point , j'ai un pti problem , je pense que vous pouvez m'aidez , c'est de créé un produit par le client , puis l'ajouter au panier , c'est moins complexe que le votre , Link to comment Share on other sites More sharing options...
Ben S. Posted December 28, 2009 Author Share Posted December 28, 2009 Bonjour tout le monde,Le descriptif arrive, laissez-moi le temps de vérifier que ma procédure fonctionne. J'espère pouvoir poster ça aujourd"hui. Link to comment Share on other sites More sharing options...
easybizness Posted December 28, 2009 Share Posted December 28, 2009 Génial. Merci bcp Link to comment Share on other sites More sharing options...
Ben S. Posted December 28, 2009 Author Share Posted December 28, 2009 Voici le détails des modifs pour pouvoir créer des utilisateurs de type "founrisseur" qui peuvent chacun ajouter leurs propres produit dans la boutique, sans avoir accès aux produits des autres fournisseurs et sans avoir la possiblité de toucher au rubriquage de la boutique.1 - Créer un compte fournisseura. Nouveau profil "Fournisseur"- Employés > Profils : "Nouveau". Nom : "Fournisseur". Validerb. Permissions associé au compte "Fournisseur"- Employés > Permissions. Sélectionner dans la liste déroulante "Fournisseur" (>> Toutes les cases à cocher se décochent). Cocher toutes les cases de la ligne "Catalogue" (les mises à jour s'enregistrent directement au clic de chaque case à cocher)c. Créer un utilisateur- Employés : "Nouveau". Saisir ses infos et choisir le profil "Fournisseur" dans la liste déroulante. Valider2 - Créer une table dans la Base de Données pour enregistrer les associations entre les employés et les produits qu'ils enregistrent . Dans phpMyAdmin, exécuter la requête suivante : CREATE TABLE IF NOT EXISTS `ps_access_product` ( `id_employee` int(11) unsigned NOT NULL, `id_prudct` int(11) NOT NULL, PRIMARY KEY (`id_employee`,`id_product`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 3 - Modifications du fichier "[admin]/tabs/AdminProducts.php"a. Dans le constructeur : fonction __construct()Ajouter la variable $cookie parmi les variables récupérées en global. Le code suivant : global $currentIndex; devient global $currentIndex,$cookie; b. Après la ligne 53, ajouter le code PHP donné en dessous, à la suite les 2 lignes de code suivantes : $this->_filter = 'AND cp.`id_category` = '.intval($this->_category->id); $this->_select = 'cp.`position`, i.`id_image`'; . code à ajouter : // Pour tous les employés non admin, on filtre la liste des produits aux seuls produits associés à l'employé connecté if (intval($cookie->id_employee)!=1) { $this->_join .= ' LEFT JOIN `'._DB_PREFIX_.'access_product` ap ON (ap.`id_product` = a.`id_product`)'; $this->_filter .= ' AND ap.id_employee='.intval($cookie->id_employee); } c. A ligne 638, dans la fonction submitAddProduct()Ajouter la variable $cookie parmi les variables récupérées en global. Le code suivant : global $currentIndex; devient global $currentIndex,$cookie; d. Après la ligne 765, ajouter le code PHP donné en dessous, à la suite les 2 lignes de code suivantes : Hook::addProduct($object); Search::indexation(false); . code à ajouter : // Enregistrement de l'association Employé<->Produit en Base de Données lors de l'enregistrement d'un nouveau produit $sql = 'INSERT INTO '._DB_PREFIX_.'access_product (id_employee, id_product) VALUES ('.intval($cookie->id_employee).','.$object->id.')'; Db::getInstance()->Execute($sql); 4 - Modifications du fichier "[admin]/tabs/AdminCategories.php"a. Après la ligne 33, ajouter le code PHP donné en dessous, à la suite les 3 lignes de code suivantes : $this->edit = true; $this->view = true; $this->delete = true; . code à ajouter : // Restriction des droits sur les catégories pour les comptes autres qu'Admin if (intval($cookie->id_employee)!=1) { $this->edit = false; $this->delete = false; } b. Remplacer les lignes 88 et 89 ayant pour contenu le code suivant : echo 'table.'&id;_parent='.Tools::getValue('id_category').'&token;='.($token!=NULL ? $token : $this->token).'"> '.$this->l('Add a new subcategory').' '; 1 Link to comment Share on other sites More sharing options...
Ben S. Posted December 28, 2009 Author Share Posted December 28, 2009 Remarques générales :- La récupération de l'ID de l'employé me semble peu sûre mais y a-t-il un meilleur moyen ?. Il serait surtout utile de tester également le type de compte (Fournisseur) plutôt que l'ID et de changer les conditions pour filtrer les contenus pour "uniquement les comptes fournisseurs" plutôt que "tous les comptes non Admin".- Le point 4.c est un peu fait à l'arrache, il y a sûrement une meilleure manière de spécifier à la fonction displayListContent de ne pas afficher le toggle Activé/Desactivé dans le tableau, mais je n'ai pas trouvé comment.- La solution idéale serait de pouvoir gérer ces modifs en passant par l'ACL en rendant l'ACL plus fin au niveau des droits gérés- L'enregistrement en base de données du lien entre le produit et l'employé ne fonctionne pas dans le cas d'un import de produits via un fichier CSV.- Lors de la suppression d'un produit, il faudrait supprimer l'enregistrement correspondant dans la table "ps_access_product"Cette procédure semble fonctionner pour la version 1.2.5.0 de Prestashop.... et en l'état ça risque de poser pas mal de problèmes lors des prochaines mises à jour de prestashop. Link to comment Share on other sites More sharing options...
Julien Breux Posted December 28, 2009 Share Posted December 28, 2009 Comme dit en MP, il est vrai que l'idée d'amener le noyau à être sur couché au niveau des classes est un bonne idée.Ceci dit, dans la version 1.2.5, pour "ré écrire" un onglet, tu peux le faire via un module (par contre, il faut suivre les versions)Voir mon tuto #1. Link to comment Share on other sites More sharing options...
Ben S. Posted December 30, 2009 Author Share Posted December 30, 2009 Oups, j'avais fait une faute de frappe dans la requête SQL de création de table : le nom "id_product" dans la clé primaire était mal orthographié : j'ai corrigé la faute. Link to comment Share on other sites More sharing options...
easybizness Posted January 4, 2010 Share Posted January 4, 2010 Salut Ben S.Je n'ai pas encore eu le temps de tester tes formidables modif,Cela fonctionne parfaitement pour toi?? Link to comment Share on other sites More sharing options...
Ben S. Posted January 5, 2010 Author Share Posted January 5, 2010 J'ai essayé de tester le plus proprement possible, en partant d'une installation toute vierge (celle avec les produits de démonstration) et pour moi tout fonctionne bien.Si tu rencontres des difficultés, il faut surtout me les dire, car je conserve précieusement la procédure en cas de mise à jour prestashop. Link to comment Share on other sites More sharing options...
Ben S. Posted January 15, 2010 Author Share Posted January 15, 2010 >> Easybusiness, as-tu eu l'occasion de tester ces modifs ?Pour ma part, j'ai (enfin) réussi à faire un import de produits dans mon catalogue. Je confirme que l'association Employé <-> Produit ne se fait pas dans ce cas... et c'est vraiment la poisse !Ce côté galère m'a amené à aborder mon problème sous un angle différent : je vais tenter de ne plus m'appuyer sur une table perso pour enregistrer l'association entre un produit et un employé, mais de récupérer cette association dans les fiches produits car on peut associer un produit à un fournisseur. Concrêtement, à partir du moment où un admin affecte un produit à un fournisseur, ce dernier verra apparaître le produit parmi la liste des produits qu'il peut éditer... En effet, avec mon système présenté ci-dessus, après un import je dois me farcir à la main (en SQL ou via un script PHP) les associations Produit <-> Employé dans ma table perso... Le fait de passer par le champ "Fournisseur" me permettra de gérer cette association par la fiche produit et aussi directement dans l'import.A noter que lors d'un enregistrement de nouveaux produits de la part d'un fournisseur, celui-ci devra se proclamer "Fournisseur" de ce nouveau produit...J'espère que vous me suivez.. je regarde ça de plus près et posterai les modifs à faire si j'arrive à un résultat probant. Link to comment Share on other sites More sharing options...
easybizness Posted January 17, 2010 Share Posted January 17, 2010 Salut ben, ben j'ai testé tes modifs et ca fonctionne mais je n'avais pas pensé au problème que tu viens d'annoncer.j'espere que tu y arriveras.au fait comment fais tu l'import de tes produits? J'ai déjà essayé plusieurs solutions (avec un CSV) mais ca échoue. Link to comment Share on other sites More sharing options...
ShowYou Posted March 9, 2010 Share Posted March 9, 2010 Bonjour, Juste une idée en passant.... dans le fichier csv d'import, puisque la liaison se fait produit<=>fournisseur, ne pourrait-on pas avoir un employé du même nom que le fournisseur ?Le nom de l'employé ne peut-il pas s'inscrire d'office comme fournisseur lors de la création de ses fiches produits??? (cookie, ip...???)Je la ramène un peu moi la novice... ;-)Cela dit, peut-être avez-vous résolu le problème .... J'étais sur le point de faire les modifs mais j'ai été stoppée en plein vol ! Link to comment Share on other sites More sharing options...
Ben S. Posted March 9, 2010 Author Share Posted March 9, 2010 ... ne pourrait-on pas avoir un employé du même nom que le fournisseur ?Le nom de l'employé ne peut-il pas s'inscrire d'office comme fournisseur lors de la création de ses fiches produits??? C'est justement ce qui m'a amené à l'idée de ne pas passer par un table Produit<=>Employé comme j'ai fait... Je pense qu'il serait plus simple de retracer le lien entre l'employé et un produit en passant par le nom du fournisseur oubien une table Employé<=>Fournisseur. Ainsi, on peut profiter des outils d'imports de PS et on a moins de code à modifier...Je vais tester cette solution dès que j'aurai 1 peu de temps... Dès que j'ai quelque chose qui fonctionne, je refais 1 tuto. Link to comment Share on other sites More sharing options...
ShowYou Posted March 9, 2010 Share Posted March 9, 2010 Merci pour votre réponse rapide.En y réfléchissant, si les "employés" gèrent leurs propres produits, l'import n'est utile que pour un catalogue important ou qu'en cas d'extrême urgence.Je vais me pencher sur les modifs... au cas où EUREKA passerait par là !! Je vous surveille quand même d'un oeil ;-) Link to comment Share on other sites More sharing options...
macabann Posted March 29, 2010 Share Posted March 29, 2010 as tu reussi a associer l'employé avec le fournisseur ? et si oui quel est la nouvelle procedure pour le réaliser....merci Link to comment Share on other sites More sharing options...
pierre bernard Posted April 22, 2010 Share Posted April 22, 2010 Bonjour,quelqu'un pourrait mettre les fichier modifier en ligne c'est-à-dire les fichiers suivants : AdminCategories.phpAdminCatalog.phpAdminProducts.phpcar j'ai suivi les différentes étapes de Ben S. mais chez ma sa ne passe pasmerci d'avance Link to comment Share on other sites More sharing options...
pierre bernard Posted April 23, 2010 Share Posted April 23, 2010 personne ne peut m'aider Ben S. pourrez vous mettre les 3 fichiers en ligne merci bcp Link to comment Share on other sites More sharing options...
emraud Posted April 24, 2010 Share Posted April 24, 2010 BonjourJe me joint à la demande de Jean-Bernard,Qui comme moi dois parfois douter de ses insertions.Le fichier initial permet de procéder par comparaison et évite les oublies de parenthèse ou point virgule...etc...D'avance, merci Link to comment Share on other sites More sharing options...
guev Posted June 4, 2010 Share Posted June 4, 2010 BonjourPeux t-on aller plus loin et faire en sorte que l'activation du produit se fasse uniquement par l'admin avec au préalable un email lui disant d'un produit et en attente de validation ?Si oui quelles sont les modifications à apporter ?Merci a tousGuev Link to comment Share on other sites More sharing options...
pierre bernard Posted January 28, 2011 Share Posted January 28, 2011 Bonjour,re up Link to comment Share on other sites More sharing options...
pierre bernard Posted April 13, 2011 Share Posted April 13, 2011 Voici le détails des modifs pour pouvoir créer des utilisateurs de type "founrisseur" qui peuvent chacun ajouter leurs propres produit dans la boutique, sans avoir accès aux produits des autres fournisseurs et sans avoir la possiblité de toucher au rubriquage de la boutique.1 - Créer un compte fournisseura. Nouveau profil "Fournisseur"- Employés > Profils : "Nouveau". Nom : "Fournisseur". Validerb. Permissions associé au compte "Fournisseur"- Employés > Permissions. Sélectionner dans la liste déroulante "Fournisseur" (>> Toutes les cases à cocher se décochent). Cocher toutes les cases de la ligne "Catalogue" (les mises à jour s'enregistrent directement au clic de chaque case à cocher)c. Créer un utilisateur- Employés : "Nouveau". Saisir ses infos et choisir le profil "Fournisseur" dans la liste déroulante. Valider2 - Créer une table dans la Base de Données pour enregistrer les associations entre les employés et les produits qu'ils enregistrent . Dans phpMyAdmin, exécuter la requête suivante :CREATE TABLE IF NOT EXISTS `ps_access_product` ( `id_employee` int(11) unsigned NOT NULL, `id_prudct` int(11) NOT NULL, PRIMARY KEY (`id_employee`,`id_product`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 3 - Modifications du fichier "[admin]/tabs/AdminProducts.php"a. Dans le constructeur : fonction __construct()Ajouter la variable $cookie parmi les variables récupérées en global. Le code suivant : global $currentIndex; devient global $currentIndex,$cookie; b. Après la ligne 53, ajouter le code PHP donné en dessous, à la suite les 2 lignes de code suivantes : $this->_filter = 'AND cp.`id_category` = '.intval($this->_category->id); $this->_select = 'cp.`position`, i.`id_image`'; . code à ajouter : // Pour tous les employés non admin, on filtre la liste des produits aux seuls produits associés à l'employé connecté if (intval($cookie->id_employee)!=1) { $this->_join .= ' LEFT JOIN `'._DB_PREFIX_.'access_product` ap ON (ap.`id_product` = a.`id_product`)'; $this->_filter .= ' AND ap.id_employee='.intval($cookie->id_employee); } c. A ligne 638, dans la fonction submitAddProduct()Ajouter la variable $cookie parmi les variables récupérées en global. Le code suivant : global $currentIndex; devient global $currentIndex,$cookie; d. Après la ligne 765, ajouter le code PHP donné en dessous, à la suite les 2 lignes de code suivantes : Hook::addProduct($object); Search::indexation(false); . code à ajouter : // Enregistrement de l'association Employé<->Produit en Base de Données lors de l'enregistrement d'un nouveau produit $sql = 'INSERT INTO '._DB_PREFIX_.'access_product (id_employee, id_product) VALUES ('.intval($cookie->id_employee).','.$object->id.')'; Db::getInstance()->Execute($sql); 4 - Modifications du fichier "[admin]/tabs/AdminCategories.php"a. Après la ligne 33, ajouter le code PHP donné en dessous, à la suite les 3 lignes de code suivantes : $this->edit = true; $this->view = true; $this->delete = true; . code à ajouter : // Restriction des droits sur les catégories pour les comptes autres qu'Admin if (intval($cookie->id_employee)!=1) { $this->edit = false; $this->delete = false; } b. Remplacer les lignes 88 et 89 ayant pour contenu le code suivant : echo 'table.'&id;_parent='.Tools::getValue('id_category').'&token;='.($token!=NULL ? $token : $this->token).'"> '.$this->l('Add a new subcategory').' '; 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