以编程方式更改模型内联元素的顺序

Programmatically change order of inline elements of a model

我需要以编程方式更改模型内联组中元素的顺序。 准确地说,我需要通过 TCEmainHook 将某些子项移动到内联列表的顶部。 有什么想法可以如何在不对 MM table 进行肮脏的 SQL 查询和操纵排序的情况下实现这一目标?我尝试了 DataHandler 并操纵了 ObjectStorage,但找不到解决方案。 感谢您的帮助!

为此避免涉及 Extbase。根据您的用例,您可以使用 "afterDatabaseOperations" 或 "processCmdmap_postProcess"。你应该这样做的方法是监听你的父记录的更新,当它完全完成时(这是因为你将在 post-hooks 中)你可以使用任意一个重新排序你的关系你喜欢的规则。

SQL 查询并不肮脏 - 但如果您尝试在非 Extbase 上下文中使用它,Extbase 肯定是混乱的,特别是持久性会给您带来一些问题。可以通过单个查询对特定列的所有关系进行重新排序,因为根据您描述用例的方式来判断(将一些移到顶部,将其他的保留在原处)您只需要更新 "sorting" 列给定 table 中已识别的 UID 列表。您可以阅读当前排序是什么,并确定需要在 UPDATE 查询中减去的数字,以将其更改为低于当前最低排序值的值。

例如:

UPDATE myrelationtable SET sorting = sorting - 1200 WHERE uid IN (1,2,3)