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,

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top