首页 > 解决方案 > 以编程方式更改模型内联元素的顺序

问题描述

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

标签: typo3typo3-8.x

解决方案


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

SQL 查询并不肮脏——但如果您尝试在非 Extbase 上下文中使用 Extbase 肯定会很混乱,尤其是持久性会导致一些问题。重新排序某个列的所有关系可以使用单个查询来完成,因为从您描述用例的方式来看(将一些移到顶部,将其他保留在原处)您只需要更新已识别的“排序”列给定表中的 UID 列表。您可以读取当前排序是什么,并确定您需要在 UPDATE 查询中减去的数字,以将其更改为低于当前最低排序值的值。

例如:

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


推荐阅读