Depuis la sortie de Prestashop en version 1.4, la surcharge du cœur est désormais possible sans pour autant hacker le cœur de Prestashop. Cette fonctionnalité, qui a certainement dû énormément vous rendre service, n’est par contre pas possible à réaliser pour surcharger classes de l’admin, les Tabs.
Il existe cependant une petite astuce qui nous permet de réaliser « proprement » la surcharge des classes d’admin. Prenons par exemple l’entité manufacturer (la notion de marque dans Prestashop), nous souhaiterions ici ajouter un champ afin de pouvoir renseigner l’adresse du site web de la marque. Pour réaliser cela il faut modifier la table manufacturer (il serait préférable de dupliquer la table pour éviter tout problème lors d’une mise à jour de votre boutique) en ajoutant un champ website.
Une fois ce champ en base ajouté, il faut surcharger la classe Manufacturer.php. D’ailleurs, je vous conseille cet excellent tutoriel de surcharge du coeur de Prestashop.
A présent, il ne reste plus qu’à pouvoir renseigner ce champ depuis l’interface d’administration des marques. Pour celà, Il faut créer une nouvelle classe Tabs AdminManufacturersExtended.php qui étend AdminManufacturers.php et que l’on enregistrere dans le dossier Tabs de l’admin.
Pour mon exemple, je me contenterai de garder uniquement la méthode displayForm() que je récupère dans son intégralité de la classe AdminManufacturers.php.
Voici donc le contenu (simplifié) de la classe AdminManufacturersExtended :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Ajouter l'inclusion de la classe mère include(PS_ADMIN_DIR.'/tabs/AdminManufacturers.php'); class AdminManufacturersExtended extends AdminManufacturers { //Ici, par souci de clarté, n'apparaissent que les lignes qui changent ou qui sont ajoutées : public function displayForm($isMainTab = true) { //remplacer parent::displayForm(); par la ligne ci-dessous : AdminTab::displayForm(); //Le code ci-dessous est à positionner à l'endroit voulu dans le formulaire. echo '<br /><label>'.$this->l('Website:').'</label> <div> <input type="text" size="80" name="website" value="'.htmlentities($this->getFieldValue($manufacturer, 'website'), ENT_COMPAT, 'UTF-8').'" /> </div>'; } } |
Voilà, votre Tabs prend désormais bien en compte votre nouveau champ. Cependant, il n’est pas encore accessible depuis la navigation de l’admin. En fouillant un peu dans les fonctionnalités de l’admin de Prestashop, je me suis rendu compte qu’il existait une interface nous permettant de modifier, voir même de créer de nouveau onglet d’admin. Pour celà, il faut se rendre dans l’onglet Employés > Onglets et de modifier l’entrée Marque (ID par défaut : 10) comme suit :
A présent vous avez la possibilité de renseigner un nouveau champ pour une marque directement depuis l’admin et ce grâce à la surcharge d’une classe de l’admin avec Prestashop 1.4 !
N’hésitez pas à me faire part de vos commentaires, toutes remarques est bienvenue ;)
Note importante: attention, même si ce code a bien été testé, si vous l’utilisez, je ne garantis pas le bon fonctionnement de votre boutique Prestashop
Salut,
Je viens de voir ton article sur l’override de l’admin prestashop.
Je me retrouve en galère là dessus.
L’override marche nickel, mais je souhaiterais trier mes marques comme les produits
Je galère avec les champs positions (avec champ ajouté en base).
As tu déja rencontré ce problème et si oui, as tu déja réalisé cette manip?
PS j’ai essayé de passer par ton formulaire de contact mais je pense que ca n’a pas fonctionné ;)
Salut,
J’ai effectivement eu un problème avec le formulaire de contact. Je me suis rendu compte que je ne recevais plus de mails pendant quelques semaines. :S
Pour ton problème de tri, je n’ai pas eu à gérer ce cas précis sur mes projets, mais si celà avait été le cas, je l’aurais sans doute implémenté de la même manière que Prestashop sur la gestion du tri des produits.
Bon courage pour la suite :)
Bonjour,
Merci pour cet article fort utile !!
J’ai testé sur l’admin Bons de réduction et tout semble parfaitement fonctionner, à part un détail : la langue qui repasse en anglais. Y a t-il une astuce ou une ligne à ajouter dans le code ? Merci.
Bonjour,
Après réflexion, c’est normal…
J’ai « surchargé » AdminDiscounts avec AdminDiscountExtended, mais dans /translations/fr/admin.php, je n’ai pas mes traductions $_LANGADM[‘AdminDiscountsExtended…
[…] une possibilité de faire de la surcharge de classes de l’admin plus simplement qu’actuellement. A ce propos, vous pouvez lire l’article de Sébastien sur le sujet : Surcharge de classe d’admin Prestashop. […]
Excellent article ! il décrit très bien ce qu’il faut faire ! Merci pour le partage.
Article très intéressant. Merci d’apporter solution à telle situation!