2012-01-26 1 views
2

Je lis beaucoup de documentation sur la création de modules personnalisés pour Magento.Où est-ce que je me trompe en utilisant le modèle d'observateur de Magento?

Pour mon essayer poing, j'ai créé la structure du module en utilisant Module Creator, et voici le code i ajouté dans /app/code/local/Test/MyModule/etc/config.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Test_MyModule> 
      <version>0.1.0</version> 
     </Test_MyModule> 
    </modules> 
    <!-- frontend, admin, adminhtml --> 
    <global> 
     <!-- models, resources, blocks, helpers --> 
     <events> 
      <sales_order_place_before> <!-- event i need to catch --> 
      <observers> 
       <trigger_mymodule_placeorder> 
       <type>model</type> 
       <class>test/mymodule/model_observer</class> 
       <method>sendOrder</method> 
       </trigger_mymodule_placeorder> 
      </observers> 
      </sales_order_place_before> 
     </events> 
    </global> 
</config> 

Mon fichier /app/etc/modules/Test_MyModule.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Test_MyModule> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Test_MyModule> 
    </modules> 
</config> 

Et voici mon /app/code/local/Test/MyModule/Model/Observer.php :

<?php 
class Test_MyModule_Model_Observer 
{ 
    public function sendOrder() 
    { 
     // do something. 
    } 
} 

. mais la fonction Test_MyModule_Model_Observer :: sendOrder() n'est jamais déclenchée (j'ai essayé d'y mettre un enregistreur de base de données factice pour voir si/quand la fonction est exécutée). Je sais que le module lui-même est chargé correctement, dans le fichier config.xml du module, il déclare un nouveau lien dans le menu principal et le lien s'affiche correctement (après avoir vidé le cache de magento), donc je suppose que le problème est la fonction convention de nommage que je manque quelque part .. mais où?

Répondre

3

Vous avez deux problèmes que je peux voir, qui sont tous deux liés. Vous spécifiez la classe à utiliser en utilisant la syntaxe que Mage :: getModel accepte, mais vous êtes un.) Légèrement faux dans la syntaxe, b.) Apparemment pas en train de déclarer où les modèles sont contenus (sauf si vous l'avez sorti pour être plus concis).

Vous devez ajouter vos modèles dans le noeud global. La partie testmodule peut être ce que vous voulez tant qu'elle est unique pour votre module. La valeur de classe utilisée dans la partie d'observateur deviendra alors ...

<class>testmodule/observer</class> 
+1

De plus je suggère la fonction publique SendOrder() à accepter $ argument observateur, il serait fonction publique SendOrder ($ observateur) –

+0

pas strictement nécessaire , mais vous avez raison, cela ajouterait certainement plus de clarté. –

+0

a travaillé comme un charme! @JevgeniSmirnov oui vous avez raison, dans la vraie fonction je vais prendre l'argument observateur pour faire ce que la fonction doit faire; la fonction que j'ai posté était juste un exemple;) – Strae

Questions connexes