typo3 - 以编程方式更改模型内联元素的顺序
问题描述
我需要以编程方式更改模型内联组中元素的顺序。确切地说,我需要通过 TCEmainHook 将某些孩子移动到内联列表的顶部。任何想法请如何在没有对 MM 表的肮脏 SQL 查询和操纵排序的情况下实现这一点?我尝试了 DataHandler 并操作 ObjectStorage,但找不到解决方案。感谢您的帮助!
解决方案
避免为此涉及 Extbase。根据您的用例,您可以使用“afterDatabaseOperations”或“processCmdmap_postProcess”。你应该这样做的方式是监听你的父记录的更新,当它完全完成时(这是因为你将在后挂钩中)你可以使用你喜欢的任意规则重新排序你的关系。
SQL 查询并不肮脏——但如果您尝试在非 Extbase 上下文中使用 Extbase 肯定会很混乱,尤其是持久性会导致一些问题。重新排序某个列的所有关系可以使用单个查询来完成,因为从您描述用例的方式来看(将一些移到顶部,将其他保留在原处)您只需要更新已识别的“排序”列给定表中的 UID 列表。您可以读取当前排序是什么,并确定您需要在 UPDATE 查询中减去的数字,以将其更改为低于当前最低排序值的值。
例如:
UPDATE myrelationtable SET sorting = sorting - 1200 WHERE uid IN (1,2,3)
推荐阅读
- python - Python subprocess.run 编码失败
- python - 用于在 Python 中创建和保存 Raincloud 图的 For 循环
- python - 清除 cookie 和其他站点数据后,使用 twitter 登录正在工作
- reactjs - 如何在浏览器后退按钮上保存反应状态?
- c# - 如何在没有密码的情况下打开 Npgsql 连接?
- node.js - npm gis 包并将结果保存到变量中
- r - 组不为 NA 时的汇总统计
- python - 如何在熊猫数据框中找到一天中数小时的记录数趋势?
- python - 如何清除此 AttributeError “nonetype”?
- flutter - 如何使用 Flutter 制作定制的二维码扫描器?