Cette erreur a du en énerver plus d’un durant le développement Magento. Je vais vous lister ici une liste (non exhaustive) de solutions possibles pour corriger cette erreur.
Sachant qu’elle peut venir de plusieurs endroits, si vous trouvez d’autres causes de cette erreur, avec leur solution, n’hésitez pas à en faire part ici 😉
Voici donc quelques pistes qui peuvent vous aider :
Attention à la casse
Premièrement, vérifiez dans vos déclarations que la casse est correcte :
<helpers> <mymodule> <class>Mynamespace_Mymodule_Helper</class> </mymodule> </helpers>
Alors que le nommage que vous avez fixé lors de la création de votre module est le suivant : MyNamespace/MyModule :
<helpers> <mymodule> <class>MyNamespace_MyModule_Helper</class> </mymodule> </helpers>
Mauvais classe d’alias
$helper = Mage::helper('mytest');
Provoque l’erreur :
Fatal error: Class 'Mage_Mytest_Helper_Data' not found
Ce qui est défini dans le XML :
<helpers> <mymodule> <class>MyNamespace_MyModule_Helper</class> </mymodule> </helpers>
C’est donc l’appel de l’helper qui est mal instancié, il faut l’appeler comme il est nommé dans le XML de config :
$helper = Mage::helper('mymodule');
Mauvais nom de classe de l’Helper
Cette fois-ci mon appel à l’helper est correct :
$helper = Mage::helper('mymodule');
Mais voici l’erreur qui s’affiche :
Fatal error: Class 'MyNamespace_MyModule_Helper_Data' not found
Vérifiez le nom de classe de votre Helper :
class MyNamespace_MyModule_Helper extends Mage_Core_Helper_Abstract
Ici il est incorrect, il faut ajouter le « Data »
class MyNamespace_MyModule_Helper_Data extends Mage_Core_Helper_Abstract
Sauf si vous appelez votre helper de la sorte : mymodule/myclass, ici le nom de classe est spécifié manuellement.
Helper Custom
Justement en parlant d’helper custom, regardons le cas qui suit :
$helper = Mage::helper('myclass');
Mon helper est defini dans le XML de la sorte :
<helpers> <mymodule> <class>MyNamespace_MyModule_Helper</class> </mymodule> </helpers>
Ma classe est enregistrée dans app/code/local/MyNamespace/MyModule/Helper/Custom.php
Et voici l’erreur qui est générée :
Fatal error: Class 'Mage_Myclass_Helper_Data' not found
Pour faire face à cette erreur, vérifiez l’appel de votre helper. Il faut bien spécifier le nom de l’helper, PUIS la classe custom. Dans notre exemple cela donne :
$helper = Mage::helper('mymodule/myclass');
Mauvais nommage du module pour les traductions
En voulant créer/modifier un rôle. J’ai eu l’erreur suivante :
Fatal error: Class 'Mage_MyNamespace_MyModule_Helper_Data' not found
Pourtant côté XML tout à l’air correct :
<helpers> <mymodule> <class>MyNamespace_MyModule_Helper</class> </mymodule> </helpers>
Et ma classe également :
class MyNamespace_MyModule_Helper_Data extends Mage_Core_Helper_Abstract
Après avoir vérifié toutes les erreurs énoncées ci-dessus, mon code était correct. En fouillant un peu les message d’erreur, je me suis rendu compte qui c’était au niveau des ACL :
<acl> <resources> <admin> <children> <system> <children> <config> <children> <mymodule translate="title" module="MyNamespace_MyModule"> <title>My Module</title> </mymodule> </children> </config> </children> </system> </children> </admin> </resources> </acl>
La ligne suivante est la coupable : <ereservation translate= »title » module= »MyNamespace_MyModule »>, car mon helper est défini dans mon XML par <mymodule>
Il faut donc modifier le XML pour avoir :
<acl> <resources> <admin> <children> <system> <children> <config> <children> <mymodule translate="title" module="mymodule"> <title>My Module</title> </mymodule> </children> </config> </children> </system> </children> </admin> </resources> </acl>
D’autres propositions?
Si vous aussi avez été victime d’une erreur de ce genre, et que la solution n’est pas énumérée ici, n’hésitez pas à en faire part dans les commentaires 🙂