代码之家  ›  专栏  ›  技术社区  ›  Prattski

在Magento是否有客户帐户注册活动?

  •  15
  • Prattski  · 技术社区  · 16 年前

    我希望能够使用 module 我正在建造的 customer registers 一个账户,但我似乎找不到 event 对…开火 new customer registration .

    有人知道 事件 是为了这个吗?

    17 回复  |  直到 9 年前
        1
  •  44
  •   Alana Storm    16 年前

    每当我寻找活动时,我将临时编辑 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;
    }
    

    然后做我想做的任何动作。Magento事件在逻辑上是命名的,因此扫描/排序生成的日志通常会显示我在寻找什么。

        2
  •  19
  •   Paul Grigoruta    13 年前

    客户注册成功是您想要的:

    <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>
    
        3
  •  16
  •   Jonathan Day    12 年前

    今天我发现了如何做到这一点。它涉及到使用一个通用控制器事件。中的此节点 config.xml 将加入正确的事件:

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

    这个 controller_action_postdispatch_REQUESTPATH 为每个扩展的控制器引发事件 Mage_Core_Controller_Front_Action (基本上都是这样)这使得瞄准变得非常容易。同上 controller_action_predispatch_REQUESTPATH .

        4
  •  7
  •   ahe_borriglione    9 年前

    我有点惊讶,如果完全解决了这个问题,没有一个答案。

    可能发生客户创建

    1. 按URL客户/帐户/创建
    2. 在结账时登记

    我通过跟踪两个事件解决了这个问题:

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

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

    编辑:我改变了

    <controller_action_predispatch_customer_account_createpost>
    

    进入之内

    <controller_action_postdispatch_customer_account_createpost>
    

    因为在predpatch上还没有创建帐户。例如,如果商店中已经存在电子邮件,则可能会出现错误。

        5
  •  5
  •   Dumbrava Razvan Aurel    15 年前

    没有直接事件,但您可以使用 客户保存后提交 事件。此事件还保证将客户保存在商店的数据库中。此事件的问题是触发了两次。下面是一个允许您使用此事件的黑客程序-观察者函数如下所示:

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

    希望这能帮助别人!

        6
  •  4
  •   Katapofatico    15 年前

    当用户在结账时快速注册时,您还必须考虑:在Chekout注册。考虑到这种情况,您可以用自己的观察者类捕获“checkout”类型的“onepage”事件,然后使用此代码…

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

    任何人都可以说: mage_sales_model_quote->getcheckoutmethod()自1.4以来已弃用!! 但是,

  • 如果我们调用ortodox方法mage_checkout_model_type_onepage->getcheckoutmethod(),等待“method_register”之类的操作,则执行以下操作:
    if ($this->getCustomerSession()->isLoggedIn()) {
                return self::METHOD_CUSTOMER;
            }

    ……”方法“customer”是已注册用户的签出名称,而不是我们的情况…但是,是的!,因为…

  • …注册操作在“结帐类型”事件发生之前执行。那么我们现在有了一个方法客户。UPS,不一致的东西?

  • 其次,报价单保持原值:checkout\u method\u register

    结账时登记还有其他想法吗?

  •     7
  •  3
  •   user392565    16 年前

    您可以在注册后尝试客户保存,这是注册发送此事件两次的唯一方法

        8
  •  3
  •   gmadd Charles    14 年前

    实际上有 customer_save_after customer_save_before (马根托1.5)

    如果要在表单发布后即时修改一些数据,请选择 客户保存 ,更改所需的数据,仅此而已(保存操作在后面,因此您的更改将被考虑在内)。

    $customer->save() 只是不适合 客户保存后 . (致命错误)使用此观察器在客户创建后运行与客户数据无关的代码。

    希望有帮助!

        9
  •  3
  •   Krishna    13 年前

    客户注册成功

    管理员客户保存时间

    这两个事件是将客户插入数据库时的默认事件…. 当用户注册时,第一个事件在前端激发,当通过管理面板创建客户时,第二个事件在后端激发…我希望您知道如何注册事件的观察者…希望这将帮助您…

        10
  •  2
  •   Jérôme Verstrynge    14 年前

    我看起来是一样的。我相信这次活动 customer_register_success .

    您可以在以下位置找到所有活动的链接: http://www.nicksays.co.uk/magento_events_cheat_sheet/

        11
  •  2
  •   Lance Badger    13 年前

    我找到了活动结帐后提交。

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

    在observer.php中,我得到了传入的quote对象。

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

    不要使用$quote->getcheckoutmethod(),它会让您登录。不知道为什么。希望这有帮助。

        12
  •  1
  •   Mohammad Faisal Reza    12 年前

    我发现 customer_login customer_session_init 事件都是在account create中引发的。您可以为注册一个侦听器 任何一个 然后查看 创建日期 在帐户上?

        13
  •  0
  •   Prattski    16 年前

    这个问题的答案是没有这样的事件。

        14
  •  0
  •   Deepak Lamichhane    13 年前

    您可以使用客户注册成功事件。在成功创建客户后触发。以下是事件备忘表的链接。希望它也能帮助你。

    http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/
    
        15
  •  0
  •   Mohammad Faisal Reza    12 年前

    customer_register_success 是在成功注册客户后调度的事件。
    代码来自 Mage/Customer/controllers/AccountController.php :: 四百五十四 在里面 马根托1.8号 :

    protected function _dispatchRegisterSuccess($customer)
    {
        Mage::dispatchEvent('customer_register_success',
            array('account_controller' => $this, 'customer' => $customer)
        );
    }
    
        16
  •  -1
  •   Dead Man    13 年前

    customer_save_after 是在新的 customer registration .

    阅读所有 events 在这里:

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

        17
  •  -3
  •   alex    16 年前

    事件名称_¼允许客户_注册_

    我不确定这是否是你想要的,你可以写一个观察者来测试

    推荐文章