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

问题描述 投票:0回答:1

我需要以编程方式更改模型的内联组中元素的顺序。确切地说,我需要通过TCEmainHook将某些孩子移动到内联列表的顶部。如果没有在MM表上进行肮脏的SQL查询并操纵排序,请问如何实现这一点?我尝试了DataHandler并操纵了ObjectStorage,但找不到解决方案。谢谢你的帮助!

typo3 typo3-8.x
1个回答
1
投票

避免涉及Extbase。根据您的使用情况,您可以使用“afterDatabaseOperations”或“processCmdmap_postProcess”。你应该这样做的方法是监听你的父记录的更新,当它完全完成时(这是因为你将在后钩子中)你可以使用你喜欢的任意规则重新排序你的关系。

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

例如:

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

© www.soinside.com 2019 - 2024. All rights reserved.