我目前正在与一个拥有数百个类别的大型目录的客户合作。我们正在重组他们的类别树的过程中,发现Magento管理区域花费了太长的时间来做到这一点。

有没有一种方法可以使用某种脚本或可能通过API以编程方式修改类别的类别订单和父Id?

我在做类似的任务时从另一个用户那里找到了下面的堆栈问题,但是这是前一段时间发布的,并想知道是否有更好的方法来做到这一点。

https://stackoverflow.com/questions/3986344/magento-move-a-category-programmatically

感谢您的帮助:-)

有帮助吗?

解决方案

树中每个类别的位置由它的路径设置,您可以在数据库表中看到定义的路径 catalog_category_entity.路径只是一个 / 定义类别位置的类别id的分隔列表。这将永远从开始 1 是最高级别的类别,实际上没有显示在类别视图中。之后,您将看到导致您感兴趣的类别的所有类别的id。例如,在演示中,服装下男士鞋类的路径是 1/3/18/5/16.为了为这个类别设置一个新的位置,你可以简单地改变这个路径,所以把它设置为 1/3/18/5 会将类别位置更改为服装而不是鞋子下。

因此,要更改树中此特定类别的位置,您可以简单地执行以下操作:

$category = Mage::getModel('catalog/category')->load(16);
$category->setPath('1/3/18/5')->save();

并且该类别将转移到服装而不是鞋子类别的孩子。然而,一个重要的注意事项。您还需要执行其他几个步骤来编辑类别,以便也必须更改与确定类别位置相关的其他逻辑(例如,调用 getLevel() 在类别上,现在是错误的。因此,除了路径,您还需要更新 parent_id, position, levelchildren_count.所有这些都可以用与......相同的技术进行更新 path (即 setChildrenCount()).

如果您需要更新很多类别,而不是一个非常简单的树配置,那么确定每个类别的每个值需要是什么并不是一件容易的事。我的建议是坚持以管理员的方式做事,以确保所有的信息最终都是正确的,如果你想尝试这种方法,那么首先在安全的环境中尝试,然后测试并谨慎进行。

其他提示

Jonathan建议的工作真的很好,并使我能够非常快速更新类别订单。我还发现,将索引保存模式从“保存”到“手动更新”切换到“手动更新”也会加速管理区域,并使我能够保存更改,而无需等待时间。当我发现这个时,我已经写了一个使用上面方法来更新它们的脚本。希望这有助于: - )

许可以下: CC-BY-SA归因
scroll top