TYPO3 LTS最新版CKEditor RTE表格单元格列表出现 问题求助
Fixing Unwanted
in Table Cells with Lists in TYPO3 LTS CKEditor 我之前也踩过这个坑——用TYPO3最新LTS版本的CKEditor时,在表格单元格里插入列表,后端不管是编辑窗口、代码视图,甚至数据库里的内容都干干净净,可前端渲染出来就莫名多了个 ,代码变成<td> <ul><li>text</li></ul></td>。折腾了一阵后发现,这大概率是TYPO3的内容处理管道或者CKEditor的自动格式化在渲染环节偷偷加的,下面是我亲测有效的解决办法:
调整TypoScript内容解析规则
TYPO3的lib.parseFunc_RTE负责处理RTE输出的内容,有时候会在块元素(比如列表)前自动插入空白字符。你可以在站点的TypoScript配置里添加这段规则,专门针对表格单元格里的列表做处理:lib.parseFunc_RTE { externalBlocks { td { stdWrap.parseFunc =< lib.parseFunc_RTE stdWrap.parseFunc.externalBlocks > stdWrap.parseFunc.nonTypoTagStdWrap.encapsLines { encapsTagList = ul, ol remapTag = } } } }这段配置会让表格单元格内的
<ul>/<ol>元素跳过自动添加空格的逻辑,避免生成多余的 。给CKEditor加自定义过滤规则
有时候是CKEditor的自动格式化把隐形空白转成了 。你可以在后端「设置」->「RTE配置」里找到对应编辑器的配置,添加一段自定义JS:CKEDITOR.on('instanceReady', function(editor) { editor.dataProcessor.htmlFilter.addRules({ elements: { td: function(element) { // 清理单元格内列表前的空白文本节点 if (element.children.length > 0 && (element.children[0].name === 'ul' || element.children[0].name === 'ol')) { element.children = element.children.filter(child => child.type !== 'text' || child.value.trim() !== '' ); } return element; } } }); });这段代码会在编辑器输出内容时,自动删掉表格单元格里列表前面的空白文本,从源头避免
生成。别忘了清缓存!
不管改了TypoScript还是CKEditor配置,一定要清空TYPO3的所有缓存——页面缓存、配置缓存都要清,不然旧配置可能还在生效,白忙活一场。
内容的提问来源于stack exchange,提问作者lisardo
相关产品推荐
相关产品推荐

