导入产品后的 Magento 调用事件
Magento call event after import product
我想知道在产品导入操作后会触发哪个事件complete.I想在从 Magento 的管理端完成产品导入后设置一些逻辑。我试过这个 catalog_product_import_finish_before 但它在我的情况下不起作用,我想在产品导入工作完成后添加我的逻辑。
在 Magento 1.9 中有什么方法可以做到这一点吗?
提前致谢
由于我不确定您是如何导入产品的,所以这里提供了一种通用的查找方法。
如果您打开 app/Mage.php,查找函数 dispatchEvent()。此函数调度 Magento 中的所有事件。如果您在该函数的某处添加一个日志记录调用,您可以记录所有被触发的事件,从而找到您需要的事件。
public static function dispatchEvent($name, array $data = array())
{
Varien_Profiler::start('DISPATCH EVENT:'.$name);
$result = self::app()->dispatchEvent($name, $data);
Mage::log($name,null,'events.log');
Varien_Profiler::stop('DISPATCH EVENT:'.$name);
return $result;
}
数据将显示在 var/log/events.log 中。请务必启用日志记录。祝你好运!
看起来这是 ImportExport
模块中调度的唯一事件。因此,如果这个方法不适合您,那么您可以创建您的模块(如果尚未完成)并从 Mage_ImportExport_Adminhtml_ImportController
重写 startAction()
并在该方法中您需要的地方添加您的逻辑。
这是如何完成的(假设模块是 Mycompany_ImportExport):
在模块的 etc/config.xml
配置部分添加以下标签以创建控制器重写:
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Mycompany_ImportExport before="Mage_ImportExport">Mycompany_ImportExport_Adminhtml
</Mycompany_ImportExport>
</modules>
</args>
</adminhtml>
</routers>
</admin>
然后创建文件夹 Mycompany/ImportExport/controllers/Adminhtml
并创建文件 ImportController.php
.
最后补充:
require_once 'Mage/ImportExport/controllers/Adminhtml/ImportController.php';
class Mycompany_ImportExport_Adminhtml_ImportController extends Mage_ImportExport_Adminhtml_ImportController
{
public function startAction()
{
// duplicate code from original and add logic here
}
}
如果您想查看系统中的事件列表,请对 app 文件夹执行 grep 命令:protected $_eventPrefix
。我能得到的最接近您的活动的是 /app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php
文件。其中事件前缀定义为:
protected $_eventPrefix = 'catalog_product_import';
您需要扩展此 class 并在其中添加您的调度!另外,我不确定 finish
是否用于 Magento 动态事件。您可能更喜欢使用 save_row
代替? This 文章可能对您有所帮助(搜索动态事件)。
我想知道在产品导入操作后会触发哪个事件complete.I想在从 Magento 的管理端完成产品导入后设置一些逻辑。我试过这个 catalog_product_import_finish_before 但它在我的情况下不起作用,我想在产品导入工作完成后添加我的逻辑。
在 Magento 1.9 中有什么方法可以做到这一点吗?
提前致谢
由于我不确定您是如何导入产品的,所以这里提供了一种通用的查找方法。
如果您打开 app/Mage.php,查找函数 dispatchEvent()。此函数调度 Magento 中的所有事件。如果您在该函数的某处添加一个日志记录调用,您可以记录所有被触发的事件,从而找到您需要的事件。
public static function dispatchEvent($name, array $data = array())
{
Varien_Profiler::start('DISPATCH EVENT:'.$name);
$result = self::app()->dispatchEvent($name, $data);
Mage::log($name,null,'events.log');
Varien_Profiler::stop('DISPATCH EVENT:'.$name);
return $result;
}
数据将显示在 var/log/events.log 中。请务必启用日志记录。祝你好运!
看起来这是 ImportExport
模块中调度的唯一事件。因此,如果这个方法不适合您,那么您可以创建您的模块(如果尚未完成)并从 Mage_ImportExport_Adminhtml_ImportController
重写 startAction()
并在该方法中您需要的地方添加您的逻辑。
这是如何完成的(假设模块是 Mycompany_ImportExport):
在模块的 etc/config.xml
配置部分添加以下标签以创建控制器重写:
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Mycompany_ImportExport before="Mage_ImportExport">Mycompany_ImportExport_Adminhtml
</Mycompany_ImportExport>
</modules>
</args>
</adminhtml>
</routers>
</admin>
然后创建文件夹 Mycompany/ImportExport/controllers/Adminhtml
并创建文件 ImportController.php
.
最后补充:
require_once 'Mage/ImportExport/controllers/Adminhtml/ImportController.php';
class Mycompany_ImportExport_Adminhtml_ImportController extends Mage_ImportExport_Adminhtml_ImportController
{
public function startAction()
{
// duplicate code from original and add logic here
}
}
如果您想查看系统中的事件列表,请对 app 文件夹执行 grep 命令:protected $_eventPrefix
。我能得到的最接近您的活动的是 /app/code/core/Mage/Catalog/Model/Convert/Adapter/Product.php
文件。其中事件前缀定义为:
protected $_eventPrefix = 'catalog_product_import';
您需要扩展此 class 并在其中添加您的调度!另外,我不确定 finish
是否用于 Magento 动态事件。您可能更喜欢使用 save_row
代替? This 文章可能对您有所帮助(搜索动态事件)。