Typo3: 如何在页面中删除空段落

6

我正在使用Typo3 v6.1创建一个“文本”类型的标准页面。在视图中,Typo3在富文本编辑器中创建的内容之前和之后添加了四个空段落。

<p class="bodytext">&nbsp;</p>
<p class="bodytext">    <!--  CONTENT ELEMENT, uid:17/text [begin] --></p>
<p class="bodytext">        <a id="c17"></a></p>
<p class="bodytext">        <!--  Text: [begin] --></p>    

<p class="bodytext">The actual text added using the Rich Text Editor</p>    

<p class="bodytext">        <!--  Text: [end] --></p>
<p class="bodytext">&nbsp;</p>
<p class="bodytext">    <!--  CONTENT ELEMENT, uid:17/text [end] --></p>
<p class="bodytext">&nbsp;</p>  

毋庸置疑,我想要摆脱这些杂乱无章的东西,尤其是因为&nbsp;打乱了布局。

您应该添加相应的typoscript,使用的扩展程序,TYPO3版本等。 - maholtz
8个回答

8

有一个parseFunc < lib.parseFunc_RTE放错了位置。

看起来你可能有类似这样的东西:

page.10 = CONTENT
page.10.stdWrap.parseFunc < lib.parseFunc_RTE

这意味着:渲染内容后,再使用lib.parseFunc_RTE解析此内容。启动包装的代码如下:
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.wrapNonWrappedLines = <p>|</p>

在这里删除不会解决问题,因为问题的原因是lib.parseFunc_RTE在整个内容元素上进行处理,而不仅仅是应该定义的bodytext。

请查看您的TypoScript或将其添加到您的问题中。

用于测试目的:

在顶级创建一个新站点,并仅添加基本的TypoScript(添加css_styled_content模板; 检查清除设置和常量)。

page = PAGE
page.10 < styles.content.get

请查看输出,内容不应再包含p class="bodytext"

更新:

使用{content},其中{content}通过styles.content.get进行填充。例如,parseFunc会被执行两次。styles.content.get执行parseFunc,使其能够输出到浏览器。但是f:format.html也会执行lib.parseFunc,因此您的内容会被解析两次。

# in this case, f:format.html does not need to execute the parseFunc again
<f:format.html  parseFuncTSPath="">{content}</f:format.html>

如果您有一个RTE字段,请使用lib.parseFunc_RTE,如果您不希望该字段中包含HTML代码(例如标题),则请使用lib.parseFunc。

我刚刚进行了一次干净的安装(这次使用6.0而不是6.1),但问题仍然存在。我的模板中唯一影响lib.parseFunc_RTE的代码来自于这个问题。然而,即使我删除了它,我仍然会得到那些空行。当使用像News这样的插件时,Typo3甚至会在第一个标题之前添加30个空段落。 - idleberg
TYPO3默认情况下不会添加30个空段落。这取决于您的配置、模板文件或者已安装的扩展。 - maholtz

6
请在根模板脚本中添加以下行:
在常量中:
content.RTE_compliant = 0

在设置中:
tt_content.stdWrap.dataWrap >
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines>

1
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines> 可以完成我的自定义解析函数的工作。 - ntiedt
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines> 即使在 TYPO3 10 的 2021 年,仍然能够胜任。 - Jay Dinse

1
这是一个针对帖子中描述的问题变体的解决方案。
<f:format.html>
   {field.copyrightText}
</f:format.html>

给你期望段落前后的一个段落。
<f:format.html>{field.copyrightText}</f:format.html>

在模板中添加换行符并不会生成额外的段落。因此,模板中的换行似乎是由格式视图助手解析的。

希望这能对某些人有所帮助;祝你有美好的一天。


非常感谢,这也有助于在TYPO3 8.7.12中删除空段落。我将其用于页面属性上的资源关系使用,而没有任何RTE - 只有图像描述,即标题。 - MonTea

0
我进行了更多的研究,发现其他人也遇到了同样的问题。这些
标签和注释是所谓的“CSS样式内容”的结果。使用content < styles.content.get将此内容传递给前端,这是根据我的Fluid模板教程,从RTE传递内容到模板的常见方式。
有一个网站描述了以下解决方案(或变通方法):
# standard enclosure for header
lib.stdheader.10.1.fontTag = <h1>|</h1>    

# remove .csc-header
lib.stdheader.stdWrap.dataWrap >    

# plain headings
lib.stdheader.2.headerStyle >
lib.stdheader.3.headerClass >    

# (unknown, german version read "remove other stuff"
tt_content.stdWrap.dataWrap =    

# disable .bodytext in RTE paragraphs
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class >    

# disable paragraph-enclosure for these tags
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.encapsTagList = cite, div, p, pre, hr, h1, h2, h3, h4, h5, h6,table,tr,td    

# remove paragraphs in tables
#lib.parseFunc_RTE.externalBlocks.table.stdWrap.HTMLparser.removeTags = p    

# allow classes in tables
lib.parseFunc_RTE.externalBlocks.table.stdWrap.HTMLparser.tags.table.fixAttrib.class.list >

警告:我无法保证此解决方法的质量。它确实解决了大部分问题(div、注释和类都被删除了),但p标签仍然存在。


现在,我们知道您正在使用Fluid。如果您想了解发生了什么,展示HTML模板部分和相应的TypoScript可能会有所帮助。 - maholtz
在我的模板中,我使用了一个简单的<f:format.html>{content}</f:format.html>以及上面提到的TypoScript。 - idleberg

0

我也遇到过这个问题,有时候使用以下设置会有所帮助:

lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines>

但是我发现在表格中无法使用
。所以我深入研究后找到了这个解决方案:

lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.innerStdWrap_all.ifBlank =


0

可以通过删除 format.html 标签内的换行符/空格来进行修正。

不正确的:

<f:format.html>{data_item.tx_mask_content_rte} </f:format.html>

Correct <f:format.html>{data_item.tx_mask_content_rte}</f:format.html>

同样适用于<f:format.date>,在其中使用换行符/空格可能会导致致命错误。

我认为fluid处理得很差。

希望能够帮到你。


这是一个正确的答案...但也在4个月前出现过。 - MonTea

-1

这是对于我有用的解决方法,我在我的设置中添加了以下行。

config.disablePrefixComment = 1

这不是问题的真正解决方案。它只是配置TYPO3以不呈现类似于“CONTENT ELEMENT”的注释。因此,也许在您看来它看起来还可以,但仍存在配置问题。 - lorenz

-5
请将以下代码添加在标签前面:
<script>
   var elems = document.getElementsByTagName('p');
   var elemsLenght = elems.length;
   for (var i = 0; i < elemsLenght; ++i) {
       if (elems[i].innerHTML == '' || elems[i].innerHTML == ' ' || >elems[i].innerHTML == '&nbsp;')
      { 
          elems[i].innerHTML="";
          elems[i].className="";
      }
    }
 </script>

2
不是一个干净的解决方案。如果用户没有JavaScript怎么办?我认为你可以通过TYPO3解决这个问题。 - David Ansermot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接