TYPO3 v10:如何查询无内容元素的页面及多语言翻译
TYPO3 v10 批量查询无内容元素的页面及多语言版本
核心思路
由于启用了allowInconsistentLanguageHandling,翻译页面可独立存在,且内容元素的pid始终关联默认语言页面的UID,因此需要分两种场景匹配无内容的页面:
- 默认语言页面:直接匹配无对应
pid等于自身UID的内容元素 - 翻译页面:匹配无对应
pid为其父页面UID且语言与自身一致的内容元素
通过左连接pages和tt_content表,筛选出没有关联内容的页面记录。
SQL查询示例
SELECT p.uid AS page_uid, p.title AS page_title, p.sys_language_uid AS language_id, p.l10n_parent AS default_page_uid, COALESCE(p_parent.title, '默认语言页面') AS default_page_title FROM pages p LEFT JOIN pages p_parent ON p.l10n_parent = p_parent.uid LEFT JOIN tt_content c ON -- 匹配默认语言页面的内容元素 (p.sys_language_uid = 0 AND c.pid = p.uid) OR -- 匹配翻译页面对应的内容元素(关联默认页PID,语言一致) (p.sys_language_uid > 0 AND c.pid = p.l10n_parent AND c.sys_language_uid = p.sys_language_uid) WHERE p.deleted = 0 -- 排除已标记删除的页面 AND c.uid IS NULL -- 无关联内容元素 ORDER BY p.sys_language_uid, p.l10n_parent, p.title;
优化与注意事项
- 缩小范围:如果系统语言过多,可添加
AND p.sys_language_uid IN (0,3,5)指定语言ID分批查询 - 过滤系统页面:添加
AND p.doktype NOT IN (254,255)排除文件夹、回收站等系统类型页面(doktype值可根据TYPO3配置调整) - 数据安全:执行删除操作前务必备份数据库,建议先导出页面UID列表,通过TYPO3后台批量操作或专用扩展处理,避免直接用SQL删除破坏关联
- 统计预览:先用
SELECT COUNT(*)替换查询字段,统计无内容页面数量,再进行后续操作
内容的提问来源于stack exchange,提问作者Joey Bouten
相关产品推荐
相关产品推荐

