magento 数据流:如何在处理任何行之前调用一次操作

Posted

技术标签:

【中文标题】magento 数据流:如何在处理任何行之前调用一次操作【英文标题】:magento dataflow: how to call action once before processing any row 【发布时间】:2012-06-09 08:11:39 【问题描述】:

上下文: Magento 1.7.0.0 版本。我必须使用 magento 数据流高级配置文件导入 csv 数据。 我制作了一个实现 Mage_Dataflow_Model_Convert_Adapter_Abstract 的适配器。我已经实现了 saveRow() 方法来处理每一行,好的。

下一步:我想在处理任何行之前运行一些代码:类似于 save() 或 beforeSave() 方法... 我该怎么做 ?

我想我必须从 Mage_Dataflow_Model_Convert_Adapter_Abstract 并在我的导入配置文件的 Actions XML 部分添加一些内容:

<!-- adapter: loading data from local csv file-->
<action type="dataflow/convert_adapter_io" method="load">
    <var name="type">file</var>
    <var name="path">var/import</var>
    <var name="filename"><![CDATA[blabla.csv]]></var>
    <var name="format"><![CDATA[csv]]></var>
</action>

<!-- parsing: transform into database entities -->
<action type="dataflow/convert_parser_csv" method="parse">
    <var name="delimiter"><![CDATA[,]]></var>
    <var name="enclose"><![CDATA[']]></var>
    <var name="fieldnames">true</var>
    <var name="store"><![CDATA[0]]></var>
    <var name="number_of_records">1</var>
    <var name="adapter">mymodule/convert_adapter_blabla</var>
    <var name="method">saveRow</var>
</action>

欢迎提出建议,谢谢! :)

【问题讨论】:

【参考方案1】:

save() 方法每次导入只会触发一次,所以我认为这不是您想要的方式。虽然它可以访问收集数据,但根据您想要执行的操作,它可能适合。 由于您已经实现了 saveRow() 方法,您不能在执行其他任何操作之前在其中包含对某个(私有)方法的调用吗?

public function saveRow()

    $this->_somePrivateMethod();
    ...
    /** the rest of saveRow() method **/
    ...


private function _somePrivateMethod()

    /** the code you want to execute before every row is saved **/

【讨论】:

非常感谢@OSdave,我已经对其进行了测试,但它不起作用 :( :导入处理是通过来自导入 Web 控制台的 AJAX 调用执行的,每行一次!:这就是为什么一个新的适配器对象是在 Mage_Adminhtml_System_Convert_ProfileController->batchRunAction() 上创建的:$adapter = Mage::getModel($batchModel-&gt;getAdapter()); ... $adapter-&gt;saveRow($importData);。额外的一点是它看起来等待集合 o 行,最后一个代码在 for 循环中:foreach ($rowIds as $importId) ... 解决方案: a) 另一种标准的 magento 方式 b) 如何在单个 AJAX 调用中处理所有行

以上是关于magento 数据流:如何在处理任何行之前调用一次操作的主要内容,如果未能解决你的问题,请参考以下文章

magento没有发送任何邮件,如何调试?

如何以原子方式运行 2 个 SQL“SELECT”?或者在我处理它们之前获取行数的任何其他更好的方法

Magento:如何删除所有永久重定向

PayPal 订单在 Magento 中设置为“可疑欺诈”状态

magento如何调用自定义模型

Magento 2 - 如何让 2 个单独的 phtml 来处理产品列表和产品网格?