Magento müşteri hesabı kaydı için bir olay var mı?

15 Cevap php

Ben bir module her bir customer registers bir hesabı ben inşa ediyorum ki bazı işlevselliği çalışabiliyor olmak istiyorum, ama ben bulamıyorum herhangi {[(2)] } bir new customer registration üzerine ateş edilir.

Herkes bir event o için gönderilir biliyor mu?

15 Cevap

Bu sorunun cevabı için bir olay var olmasıdır.

Ben bir olay arıyorum zaman, geçici olarak belirli bir istek için tüm olaylar çıktı Mage.php dosyasını düzenlemek edeceğiz.

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;
}

ve sonra ben içine kanca çalışıyorum ne olursa olsun eylem gerçekleştirin. Magento olaylar mantıksal olarak adlandırılmış, bu nedenle tarama / çıkan günlükleri üzerinden sıralama genelde ben sonra ben ne ortaya edilmektedir.

Bunu bugün başarmak için nasıl keşfetti. Bu genel kontrol olaylardan biri kullanmayı gerektirir. Bu düğüm config.xml Doğru olayın içine kanca:

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

controller_action_postdispatch_REQUESTPATH olay hedeflemek çok kolay kılan (temelde hepsi olduğu) Mage_Core_Controller_Front_Action uzanır her denetleyicisi için atılır. Ditto controller_action_predispatch_REQUESTPATH.

customer_register_success aradığınız budur:

<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>

Sen, customer_save_after kayıt iki kez bu olayı gönderir tek şey deneyebilirsiniz

Chekout bir Kayıt: Eğer kullanıcı on-the-fly ödeme kayıt yaparken de göz önünde bulundurmanız gerekir. Bu durumda Düşünme, kendi Gözlemci sınıfı ile "checkout_type_onepage_save_order_after" olayı, ve daha sonra bu kodu yakalayabilirsiniz ...


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

Anybody may say: Mage_Sales_Model_Quote->getCheckoutMethod() is deprecated since 1.4!!,but:

  • If we call the ortodox method Mage_Checkout_Model_Type_Onepage->getCheckoutMethod(), waiting for something as "METHOD_REGISTER" this is executed:

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

    ... "METHOD_CUSTOMER" is the name for a checkout with an already registrated user, not our case.... but yes!, because....

  • ...the registration operation is perfomed before "checkout_type_onepage_save_order_after" event. Then we a have a METHOD_CUSTOMER now. Ups, something inconsistent?

  • Fortunatly, Quote özgün değeri kalır: CHECKOUT_METHOD_REGISTER

    Ödeme tarihinde kayıt için başka bir fikir?

  • Bunun için doğrudan bir olay değildir, ancak customer_save_commit_after olayını kullanabilirsiniz. Bu olay aynı zamanda müşteri mağaza veritabanına kaydetmek olduğunu garanti eder. Bu olay ile problem iki kez tetiklenir olmasıdır. Körük bu olayı kullanmak için izin veren bir kesmek - gözlemci işlevi listelenmiştir:

    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;
    
    }
    

    Bu birileri yardımcı olur umarım!

    Aslında var customer_save_after ve customer_save_before (magento 1.5)

    Eğer değiştirmek istiyorsanız, form post sonra bazı verileri on-the-fly customer_save_before, istediğiniz verileri değiştirmek almak ve bu (kaydetmek eylem böylece değişiklik dikkate alınacak, sonra gelen) hepsi bu.

    $customer->save() sadece çalışmaz customer_save_after. (Ölümcül hata) müşteri verileriyle ilgili DEĞİLDİR müşteri oluşturulduktan sonra bir kodu çalıştırmak için bu gözlemci kullanın.

    Umarım ki olur!

    Ben customer_login ve customer_session_init olaylar hem de oluşturabilirsiniz hesabına atılmış olduğunu keşfetti ettik. Ya bir dinleyici kayıt ve daha sonra hesap oluşturmak tarihini görmek için kontrol edebilir?

    Ben aynı şeyi arıyordum. Ben olay customer_register_success olduğuna inanıyorum.

    You can find a link for all events at: http://www.nicksays.co.uk/magento_events_cheat_sheet/

    customer_register_success

    adminhtml_customer_save_after

    these two are the default events when a customer is inserted into the database.... first event fires in frontend when a user registers and second event fires in the backend when a customer is created through admin panel...i hope you know how to register an observer for an event...hope this will help you...

    customer_save_after sonra çağrılan olay olan yeni bir customer registration.

    Ilgili tüm events Burada okuyun:

    http://www.magentocommerce.com/wiki/5_-_modules_and_development/reference/events

    Sen customer_register_success olayını kullanabilirsiniz. Müşteri başarıyla oluşturulduktan sonra tetiklenir. İşte olay hile yaprak bağlantıdır. O da size yardımcı olur umarım.

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

    I olay checkout_submit_all_after bulundu.

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

    Benim Observer.php ben içeri geçirilen alıntı nesne olsun

    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) {        
    }
    

    $ Alıntı-> getCheckoutMethod kullanmayın () bunun yerine login_in verir. Değil emin niçin. Umarım bu yardımcı olur.

    Olay adı: customer_registration_is_allowed

    Ben bu İstediğiniz takdirde, test etmek, bir gözlemcinin yazabilirsiniz emin değilim