¿Cómo llamar al observador en Magento (observador que no fuctiona)?
-
16-10-2019 - |
Pregunta
He establecido un Event-Observer en mi módulo personalizado, pero no se llama Observer. He habilitado mi registro y recibo esta advertencia:
2013-08-14T11:17:48+00:00 ERR (3): Warning: include(Mage/CompanyName/ModuleName/Model/Observer.php): failed to open stream: No such file or directory in /var/www/nyp/lib/Varien/Autoload.php on line 93
2013-08-14T11:17:48+00:00 ERR (3): Warning: include(): Failed opening 'Mage/CompanyName/ModuleName/Model/Observer.php' for inclusion (include_path='/var/www/nyp/app/code/local:/var/www/nyp/app/code/community:/var/www/nyp/app/code/core:/var/www/nyp/lib:.:/usr/share/php:/usr/share/pear') in /var/www/nyp/lib/Varien/Autoload.php on line 93
Código en mi config.xml para adjuntar evento y observador:
<global>
<events>
<sales_order_place_after>
<observers>
<CompanyName_ModuleName_Observer>
<type>singleton</type>
<class>CompanyName_ModuleName/observer</class>
<method>methodName</method>
</CompanyName_ModuleName_Observer>
</observers>
</sales_order_place_after>
</events>
<global>
Código en mi CompanyName/Modulename/Model/Observer.php:
<?php
class CompanyName_ModuleName_Model_Observer
{
public function __contruct()
{
}
public function methodName(Varien_Event_Observer $observer)
{
}
}
Gracias,
Solución
Basado en el grupo de clase que está utilizando (CompanyName_ModuleName
) Deberías usar:
<global>
<models>
<CompanyName_ModuleName>CompanyName_ModuleName_Model</CompanyName_ModuleName>
</models>
</global>
Otros consejos
Parece que tienes un error aquí:
<class>CompanyName_ModuleName/observer</class>
Todo antes de la barra se reduce en el uso de la notación de la taquigrafía del modelo, y rara vez debe contener un bajo. Este sería el nombre corto que proporcionó al hacer su configuración de su módulo:
<global>
<models>
<yourmodel>CompanyName_ModuleName_Model</yourmodel>
</models>
</global>
Si no definiste esto, no te preocupes. Use la ruta totalmente calificada:
<class>CompanyName_ModuleName_Model_Observer</class>
pienso esta publicación debería ayudarte.
En tu caso sería algo como esto:
<global>
<events>
<sales_order_place_after>
<observers>
<modulename_observername>
<type>singleton</type>
<class>modulename/observer</class>
<method>methodName</method>
</modulename_observername>
</observers>
</sales_order_place_after>
</events>
<models>
<modulename>
<class>CompanyName_ModuleName_Model</class>
</modulename>
</models>
<global>
El código de cofig sería así.
<events>
<core_block_abstract_prepare_layout_before>
<observers>
<companyname_jquery_prepare_layout_before>
<class>modulename/observer</class>
<method>prepareLayoutBefore</method>
</companyname_jquery_prepare_layout_before>
</observers>
</core_block_abstract_prepare_layout_before>
</events>
Esto seguramente lo ayudará a tener una mejor idea sobre cómo funciona el observador.