目前Magento处理群发行动的方式存在问题。它返回一些JS,它包含当前集合和过滤器的每个db id,无论分页如何。这是为了支持网格标题中的“全选”与“选择所有可见”选项。当你的记录数量较少时,这不是一个问题,但如果你有850k记录(在这种情况下是订单),那就成了一个严重的问题。
我的问题是,有没有人有这个问题的优雅解决方案?
我可以想到几种解决方案,每种解决方案都有其自身的缺点,但我希望有人能够以一种简单的方式解决这个问题,并将其作为一个附加模块。付费或开源解决方案都是受欢迎的建议。
澄清:
我正在寻找使用Magento中的网格小部件来解决850k +记录问题的优雅/插入式解决方案。股票Magento代码决定返回当前过滤器匹配的每条记录的id,即使它们没有显示。这不是关于记录的离线处理,而是关于将网格小部件用于日常管理任务。
一种可能的解决方案是将过滤搜索的结果存储在临时表中,并返回对搜索结果的引用。然后,您可以使用“全选”上的实际ID将其更改为使用引用对操作使用特定回调。这将保留当前的行为。
所以,再问一遍,有没有人有一个很好的解决方案?
答案 0 :(得分:6)
我在shell脚本中运行繁重的操作。我有一个通用迭代器(在我的情况下是产品,但可以用其他所有东西完成),我只实现了一个对产品执行操作的类。我的product_iterator shell脚本负责循环产品,同时只处理x个产品(以避免内存泄漏)。
答案 1 :(得分:5)
嗯,问题的最小侵入性解决方案是关闭具有大量记录的网格的“全选”选项。这可以通过扩展网格类并添加以下代码来轻松实现:
protected function _prepareMassaction()
{
$this->getMassactionBlock()->setUseSelectAll(false);
return parent::_prepareMassaction();
}
答案 2 :(得分:1)
我认为fbmc有正确的一般方法。很明显,即使您确实找到了回送所有850k记录的方法,该框架也会有心脏病发作试图处理所有这些记录。如果这是您需要的,请在shell脚本中运行逻辑。对于某些作业,您甚至可能需要批量运行它们或者向下移动到实际的SQL逻辑。
不幸的是,框架的某些部分并未用于处理这种规模。你找到了其中一个。
希望有所帮助!
谢谢, 乔
答案 3 :(得分:1)
最近我写了一篇关于“在Magento中向管理网格添加新的群发行动”的文章,
希望你会喜欢它:
http://www.blog.magepsycho.com/adding-new-mass-action-to-admin-grid-in-magento/
它描述了添加群众行动的两种方式
1 GT;扩展网格布局_prepareMassaction()方法
2 - ;使用事件:core_block_abstract_prepare_layout_before(更多升级证明方式)
由于 此致