Accéder au contenu principal

[Magento] Réécire le bon block

Petit point vocabulaire avant de commencer : quand j'utilise les mots réécrire ou réécriture, je parle d'utiliser config.xml pour modifier le comportement d'un bloc



Récemment, je devais modifier le nom dans le tableau récapitulatif des articles d'une commande. La tâche consistait à rajouter une option que j'avais passé grâce à info_buyrequest pour des questions de commodité. J'ai donc cherché la fonction qui s'en charge dans les blocs et elle se trouve dans Mage_Adminhtml_Block_Sales_Items_Column_Default.
Je me lance donc dans la réécriture de ce bloc mais après maints vidages de cache, force est de constater que cela ne fonctionne pas. Je vérifie que la fonction appelée est bien correcte et il s'agit en effet de getOrderOptions. Si je modifie directement la fonction sans la réécrire, j'ai le comportement souhaité mais la réécrire ne fonctionne pas.

Je m'aperçois vite que le bloc surchargé avec la réécriture ne remplace pas l'extension originale du bloc utilisé qui est en fait  Mage_Adminhtml_Block_Sales_Items_Column_Name. Une fois la réécriture faite sur ce bloc, on obtient enfin le résultat désiré.

L'idée est donc de réécrire la fonction dans le bloc qui est appelé car la réécriture se fait trop tard pour que les extensions du modèle de base soient prises en compte. S'il est vraiment nécessaire de modifier le bloc parent, il est toujours possible d'utiliser le pool local pour surcharger le bloc en question grâce à la préséance des pools

Commentaires

Posts les plus consultés de ce blog

[PHP] Faire un petit MVC avec des routes

Pour bon nombre de petits projets, il n'est pas nécessaire de taper dans les frameworks MVC comme Zend ou Symphony qui sont très lourds et un petit truc maison doit suffire. Je vais essayer de donner quelques tuyaux pour pouvoir faire son MVC maison avec des routes qui dirigent vers les contrôleurs et les actions.
Tout d'abord, il faut créer un fichier index.php à la racine de votre site qui va contenir le lien vers tout ce dont vous avez besoin pour faire vos routes. Ensuite, vous devez créer un dossier controlleur (si vous voulez reproduire la faute de frappe de l'exemple) dans lequel vous aurez tous vos contrôleurs. Vous pouvez éventuellement diviser ce dossier en plusieurs dossiers distincts qui contiendront les différentes parties de votre site. Veillez à appeler vos classes en rapport avec vos règles de is_callable. Dans mon exemple, le chemin vers le dossier est en minuscule et la première lettre du fichier est en majuscule. Par exemple : la classe /controlleur/fro…

Ajouter un administrateur à Magento 1 en SQL

On vous balance sur un projet, vous devez récupérer la base de données et travailler dessus dans votre environnement de développement. Le problème est que vous n'avez pas d'accès à l'administration car vous n'avez pas d'utilisateur créé en production ou en staging. Ce n'est pas une fatalité !

Il est possible de créer facilement un utilisateur qui aura les rôles suffisants dans Magento avec seulement un accès à la base de données. Pour faire cela, il faut comprendre que les administrateurs sont inscrits dans une table et leur rôle dans une autre. Dans le script suivant, on créera un administrateur avec les pleins pouvoirs mais vous pouvez adapter ce script à vos besoin en jetant un oeil à la table admin_role et en modifiant parent_id dans le script. La colonne parent_id définit le parent du rôle en question pour l'utilisateur. Si vous voulez créer un utilisateur avec des pouvoirs différents, regardez le rôle qui correspond au pouvoir que vous accorder et mo…

Injecter des icônes font-awesome via JavaScript

Les icônes de font-awesome sont traduites en svg à la volée grâce à un script. Le problème quand on injecte du html dans le DOM est que le script ne s'exécute pas correctement et l'icône n’apparaît pas. Pour palier à cela, il est possible d'utiliser un générateur de ressources qui est embarqué dans la librairie font-awesom.
Pour éviter au script de s'exécuter sur des icônes qui se répètent, la librairie comprend un script qui permet de traduire une seule fois l'image en SVG pour être réutiliser dans des listes.

Comme disent les anglo-saxons, et voilà !

Il y a d'autres exemples d'utilisation : 
https://fontawesome.com/how-to-use/on-the-web/advanced/svg-symbols