-
12-12-2019 - |
题
我目前正在与一个拥有数百个类别的大型目录的客户合作。我们正在重组他们的类别树的过程中,发现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
, level
和 children_count
.所有这些都可以用与......相同的技术进行更新 path
(即 setChildrenCount()
).
如果您需要更新很多类别,而不是一个非常简单的树配置,那么确定每个类别的每个值需要是什么并不是一件容易的事。我的建议是坚持以管理员的方式做事,以确保所有的信息最终都是正确的,如果你想尝试这种方法,那么首先在安全的环境中尝试,然后测试并谨慎进行。
其他提示
Jonathan建议的工作真的很好,并使我能够非常快速更新类别订单。我还发现,将索引保存模式从“保存”到“手动更新”切换到“手动更新”也会加速管理区域,并使我能够保存更改,而无需等待时间。当我发现这个时,我已经写了一个使用上面方法来更新它们的脚本。希望这有助于: - )