我无法通过TYPO3后端删除页面。这很可能是因为它包含大量存储在其上的记录。例如,该页面上存储了几乎一半的sys_file_reference。 是否可以通过CLI删除TYPO3页面?
答案 0 :(得分:1)
我不知道如何删除CLI。
在这种情况下,我会通过手动DB交互来帮助TYPO3,因为我认为无法手动删除此引用。
在set deleted= 1
,sys_file_references
和tablenames
上选择的表fieldname
上进行更新(= uid_foreign
)(或真正删除)。如果该表中的记录包含sys_file_references,则必须使用联接构建一个更大的查询。
您也可以尝试疯狂:
只需“删除”(= {set deleted= 1
)页面或带有数据库查询中的引用的记录,并清除调度程序任务。
照常:
以这种方式使用记录之前,请执行数据库备份。
select uid from ???table??? where pid in (???page-uid-list???)
select * from sys_file_references where tablenames=???table??? and uid_foreign in ( "first select" )
update sys_file_references set deleted=0 where tablenames=???table??? and uid_foreign in ( "first select" )
/ delete from sys_file_references where tablenames=???table??? and uid_foreign in ( "first select" )
[1] update ???table??? set deleted=1 where pid in (???page-uid-list???)
/ delete from ???table??? where pid in (???page-uid-list???)
update pages set deleted=1 where uid in (???page-uid-list???)
/
delete from pages where uid in (???page-uid-list???)
[1]
UPDATE sys_file_references
SET deleted=0
WHERE tablenames=???table???
AND uid_foreign IN (SELECT uid
FROM ???table???
WHERE pid IN (???page-uid-list???)
)
答案 1 :(得分:1)
在这种情况下,我将编写一个CommandController,它使用DataHandler-期望一个参数(页面的ID)并删除该页面。然后,您可以通过CLI调用CommandController。并查看sys_log表中的新记录。 DataHandler的delete命令触发所有子页面,内容元素和文件引用的删除(希望还有版本控制-尚未测试这种情况)。在调用命令之前进行数据库备份。删除所有内容可能要花很长时间。
答案 2 :(得分:0)
您可能会发现https://github.com/NamelessCoder/asynchronous_reference_indexing有用-这是我创建的一个小包,它委派了引用的索引编制,当您删除页面和sys_file_references时会发生这种情况,因此不会在同一请求中发生。
虽然不能真正解决问题,但通常可以使执行删除请求所需的时间低于服务器允许的阈值。