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事件在逻辑上被命名,因此通过生成的日志进行扫描/排序通常会揭示我所追求的内容.
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)
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.
如果完全解决这个案子,我有点惊讶没有答案.
客户创造可以发生
我通过跟踪两个事件来解决它:
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)
因为在预发布上,帐户尚未创建.例如,如果商店中已存在电子邮件,则可能存在错误.
小智 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)
希望这有助于某人!
| 归档时间: |
|
| 查看次数: |
27258 次 |
| 最近记录: |