observer example event create change php events magento observer-pattern

php - example - magento 2 create events



¿Hay algún evento para registrar la cuenta del cliente en Magento? (17)

Descubrí que los eventos customer_login y customer_session_init se lanzan en la creación de la cuenta. ¿Podría registrar un oyente para cualquiera y luego verificar para ver la fecha de creación en la cuenta?

Me gustaría poder ejecutar algunas funcionalidades con un module que estoy creando cada vez que un customer registers una cuenta, pero parece que no puedo encontrar ningún event que se active con un new customer registration .

¿Alguien sabe de un event que se envía para eso?


No hay un evento directo para esto, pero podría usar el evento customer_save_commit_after . Este evento también le garantiza que el cliente está guardado en la base de datos de la tienda. El problema con este evento es que se dispara dos veces. Bellow es un truco que le permite usar este evento; la función del observador está en la lista:

public function customer_save_commit_after($p_oObserver) { $l_oCustomer = $p_oObserver->getCustomer(); if ($l_oCustomer->isObjectNew() && !$l_oCustomer->getMyCustomKeyForIsAlreadyProcessed()) { $l_oCustomer->setMyCustomKeyForIsAlreadyProcessed(true); // new customer } else { // existing customer } return false; }

¡Espero que esto ayude a alguien!


Cada vez que estoy buscando un evento, voy a editar temporalmente el archivo Mage.php para generar todos los eventos para una solicitud en particular.

File: app/Mage.php public static function dispatchEvent($name, array $data = array()) { Mage::log(''Event: '' . $name); //not using Mage::log, as //file_put_contents(''/tmp/test.log'',''Dispatching ''. $name. "/n",FILE_APPEND); //poor man''s log Varien_Profiler::start(''DISPATCH EVENT:''.$name); $result = self::app()->dispatchEvent($name, $data); #$result = self::registry(''events'')->dispatch($name, $data); Varien_Profiler::stop(''DISPATCH EVENT:''.$name); return $result; }

y luego realizar cualquier acción en la que intente conectarme. Los eventos de Magento tienen un nombre lógico, por lo que escanear / clasificar los registros resultantes generalmente revela lo que busco.


nombre del evento: customer_registration_is_allowed

No estoy seguro si esto es lo que quieres, puedes escribir un observador para probar


La respuesta a esta pregunta es que no hay un evento para eso.


Puedes probar customer_save_after, lo único que el registro envía este evento dos veces


También debe tener en cuenta que el usuario se registre sobre la marcha en el proceso de pago: un registro en chekout. Pensando en este caso, puede ver el evento "checkout_type_onepage_save_order_after" con su propia clase Observer, y luego este código ...

if($observer->getEvent()->getQuote()->getCheckoutMethod(true) == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER){ (...) }

Cualquiera puede decir: Mage_Sales_Model_Quote-> getCheckoutMethod () está en desuso desde 1.4 !! ,pero:

  • Si llamamos al método ortodox Mage_Checkout_Model_Type_Onepage-> getCheckoutMethod (), esperando algo como "METHOD_REGISTER" esto se ejecuta:

    if ($this->getCustomerSession()->isLoggedIn()) { return self::METHOD_CUSTOMER; }

    ... "METHOD_CUSTOMER" es el nombre para un pago con un usuario ya registrado, no es nuestro caso ... ¡pero sí !, porque ...

  • ... la operación de registro se realiza antes del evento "checkout_type_onepage_save_order_after". Entonces tenemos un METHOD_CUSTOMER ahora. Ups, algo inconsistente?
  • Afortunadamente, la Cita permanece con el valor original: CHECKOUT_METHOD_REGISTER

    ¿Alguna otra idea para el registro al momento del pago?



  • En realidad, hay customer_save_after y customer_save_before (magento 1.5)

    Si desea modificar sobre la marcha algunos datos después de la publicación del formulario, elija customer_save_before , cambie los datos que desea y eso es todo (la acción de guardar viene después, por lo que su cambio se tendrá en cuenta).

    $customer->save() simplemente no funciona en customer_save_after . (error fatal) Utilice este observador para ejecutar un código después de la creación del cliente que NO esté relacionado con los datos del cliente.

    ¡Espero que ayude!


    customer_register_success es lo que estás buscando:

    <config> <frontend> <events> <customer_register_success> <observers> <your_module> <type>singleton</type> <class>your_module/observer</class> <method>yourMethod</method> </your_module> </observers> </customer_register_success> </events> </frontend> </config>



    customer_register_success

    adminhtml_customer_save_after

    estos dos son los eventos predeterminados cuando un cliente se inserta en la base de datos ... el primer evento se dispara en la interfaz cuando un usuario se registra y el segundo evento se activa en el backend cuando se crea un cliente a través del panel de administración ... espero que sepa cómo registrar un observador para un evento ... espero que esto te ayude ...


    Encontré el evento checkout_submit_all_after.

    <checkout_submit_all_after> <observers> <my_example> <class>my_example/observer</class> <method>customerRegistered</method> </my_example> </observers> </checkout_submit_all_after>

    En mi Observer.php obtengo el objeto de cotización que se transfiere.

    public function customerRegistered (Varien_Event_Observer $observer) { $quote = $observer->getQuote(); $checkout_method = $quote->getData(); $checkout_method = $checkout_method[''checkout_method'']; if ($checkout_method == Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) { }

    No use $ quote-> getCheckoutMethod () sino que le da login_in. No estoy seguro por qué. Espero que esto ayude.


    Descubrí cómo lograr esto hoy. Implica el uso de uno de los eventos de controlador genéricos. Este nodo en config.xml se enganchará en el evento correcto:

    <events> .... <controller_action_postdispatch_customer_account_createPost> <observers> <your_module_here>...etc

    El evento controller_action_postdispatch_REQUESTPATH se lanza para cada controlador que extiende Mage_Core_Controller_Front_Action (que es básicamente todos ellos), lo que hace que sea muy fácil de apuntar. Lo mismo para controller_action_predispatch_REQUESTPATH .


    customer_register_success es el evento enviado después del registro exitoso de clientes.
    Aquí está el código de Mage/Customer/controllers/AccountController.php :: 454 en magento 1.8 :

    protected function _dispatchRegisterSuccess($customer) { Mage::dispatchEvent(''customer_register_success'', array(''account_controller'' => $this, ''customer'' => $customer) ); }


    Estoy un poco sorprendido de que ninguna de las respuestas resuelva el caso por completo.

    La creación del cliente puede suceder

    1. por url cliente / cuenta / crear
    2. por registrarse en el pago y envío

    Lo solucioné siguiendo dos eventos:

    config.xml

    <events> <controller_action_postdispatch_customer_account_createpost> <observers> <myextensionkey_create_account> <class>myextensionkey/observer</class> <method>createAccount</method> <type>singleton</type> </myextensionkey_create_account> </observers> </controller_action_postdispatch_customer_account_createpost> <checkout_submit_all_after> <observers> <myextensionkey_checkout_create_account> <class>myextensionkey/observer</class> <method>createAccountCheckout</method> <type>singleton</type> </myextensionkey_checkout_create_account> </observers> </checkout_submit_all_after> </events>

    y en Observer.php

    public function createAccount($observer) { ... } //Nothing special here public function createAccountCheckout($observer) { if ($observer->getQuote()->getData(''checkout_method'') != Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) { return; }

    Editar: cambié

    <controller_action_predispatch_customer_account_createpost>

    dentro

    <controller_action_postdispatch_customer_account_createpost>

    porque en predispatch la cuenta no se ha creado todavía. Puede haber un error, por ejemplo, si el correo electrónico ya existe en la tienda.


    Puede usar el evento customer_register_success. Se activa después de que el cliente se crea con éxito. Aquí está el enlace de las hojas de trampa del evento. Espero que también te ayude

    http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/