在Magento有客户账户注册活动吗?

Pra*_*ski 15 php events magento observer-pattern

我希望能够运行一些功能module,我正在建立customer registers一个帐户,但我似乎找不到任何event被解雇的new customer registration.

有没有人知道event那个被派遣的人?

Ala*_*orm 45

每当我正在寻找一个事件时,我会暂时编辑该Mage.php文件以输出特定请求的所有事件.

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;
}
Run Code Online (Sandbox Code Playgroud)

然后执行我想要进行的任何操作.Magento事件在逻辑上被命名,因此通过生成的日志进行扫描/排序通常会揭示我所追求的内容.

  • 如果你有谢尔曼威廉姆斯光泽坐在你旁边 (11认同)
  • 此外,我觉得这个答案超越了.它不仅可以回答您的问题,还可以帮助您不必再问一个类似的问题."给一个人一条鱼,喂他一天.教他钓鱼,永远喂他" (9认同)
  • 毫无疑问,绝对有用.但是,我仍然想回答我的问题,所以我不会认为这是一个答案. (6认同)

Pau*_*uta 19

customer_register_success是您正在寻找的:

<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>
Run Code Online (Sandbox Code Playgroud)

  • AFAIK,此事件仅在通过url:customer/account/create创建帐户时才有效 (4认同)

Jon*_*Day 16

我今天发现了如何实现这一目标.它涉及使用其中一个通用控制器事件.将该节点config.xml挂钩到正确的事件中:

<events>
 ....
  <controller_action_postdispatch_customer_account_createPost>
    <observers>
     <your_module_here>...etc
Run Code Online (Sandbox Code Playgroud)

controller_action_postdispatch_REQUESTPATH事件被抛出每个扩展器Mage_Core_Controller_Front_Action(这基本上是所有的人),这使得它非常容易的目标.同上controller_action_predispatch_REQUESTPATH.

  • 对于我来说,使用camelCase"createPost"失败了,但是当改为`controller_action_postdispatch_customer_account_createpost`时,这种方法起了作用.谢谢! (5认同)
  • 在结账过程中注册时不会触发此操作 (2认同)
  • 后人:这是一个非常糟糕的解决方案,因为它不会触发*任何*新客户注册.只有当客户通过*特定的URL注册时,它才会触发,这不是客户在vanilla Magento中注册的唯一方式,更不用说安装任意数量的模块了.观察控制器动作很少*是正确的方法. (2认同)

ahe*_*one 7

如果完全解决这个案子,我有点惊讶没有答案.

客户创造可以发生

  1. 通过url customer/account/create
  2. 在结帐时注册

我通过跟踪两个事件来解决它:

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>
Run Code Online (Sandbox Code Playgroud)

并在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;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:我改变了

<controller_action_predispatch_customer_account_createpost>
Run Code Online (Sandbox Code Playgroud)

<controller_action_postdispatch_customer_account_createpost>
Run Code Online (Sandbox Code Playgroud)

因为在预发布上,帐户尚未创建.例如,如果商店中已存在电子邮件,则可能存在错误.

  • 加上我,因为我想知道为什么这个答案没有被检查为正确的答案. (2认同)

小智 5

没有直接事件,但您可以使用customer_save_commit_after事件.此事件还可以保证客户保存在商店的数据库中.此事件的问题是触发两次.Bellow是一个允许你使用此事件的hack - 列出了观察者功能:

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;

}
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人!


Pra*_*ski 0

这个问题的答案是没有相关的活动。