【问题标题】:Disable auto-adding of <p> tag禁用 <p> 标签的自动添加
【发布时间】:2013-07-31 08:27:35
【问题描述】:

我正在尝试在 CQ5(版本 5.6.0.20130125)中删除 &lt;p&gt; 标签的自动添加。我尝试将这些属性添加到我正在使用的text component,但没有效果。(source)

removeSingleParagraphContainer   true
singeParagraphContainerReplacement    (empty string)

我也试过this solution。同样,没有效果。

是否可以禁用&lt;p&gt;标签的自动添加?

感谢您的任何想法

EDIT 我已经尝试过this answer,但CQ 仍然在我的代码中添加了&lt;p&gt; 标签。例如,我有这个 HTML 代码

<strong>Headquarters:</strong>
<p>MY - COMPANY a.s.<br>
Random Street 77<br>
Random City</p>

提交后,代码变为

<p><strong>Headquarters:</strong></p>
<p>MY - COMPANY a.s.<br>
Random Street 77<br>
Random City</p>

我的 RTE 看起来像这样

<text jcr:primaryType="cq:widget"
      hideLabel="{Boolean}true"
      name="./text"
      xtype="richtext">
  <htmlRules jcr:primaryType="nt:unstructured">
      <docType jcr:primaryType="nt:unstructured">
          ...
      </docType>
      <blockHandling
          jcr:primaryType="nt:unstructured"
          removeSingleParagraphContainer="{Boolean}true"/>
  </htmlRules>
</text>

EDIT2 这就是我的层次结构的样子

【问题讨论】:

    标签: html aem rich-text-editor


    【解决方案1】:

    只要您只创建一个段落,您就可以通过将removeSingleParagraphContainer 属性设置为true 来防止RTE 用&lt;p&gt; 标记包围您的文本。

    对于 Mac OS X 上的 Chrome(至少),按住 shift 的同时按 enter 会插入换行符而不是分段符,因此您仍然可以创建多行文本。由于您在your last question 中说过您正在使用misctools 插件,因此您可以使用源代码编辑视图随时查看标记。

    最后,要设置removeSingleParagraphContainer 属性,您需要在对话框中的htmlRules 节点下创建另一个名为blockHandling 的子节点。你不需要弄乱singeParagraphContainerReplacement 属性,但是如果你这样做了,你会在同一个节点上设置它:

    <rtePlugins jcr:primaryType="nt:unstructured">
        ...
    </rtePlugins>
    <htmlRules jcr:primaryType="nt:unstructured">
        <docType jcr:primaryType="nt:unstructured">
            ...
        </docType>
        <blockHandling
            jcr:primaryType="nt:unstructured"
            removeSingleParagraphContainer="{Boolean}true"/>
    </htmlRules>
    

    编辑您的编辑:使用misctools插件的源代码编辑功能并粘贴此确切文本,在Mac OS X上的Chrome中为我保存和加载没有p标签: p>

    <strong>Headquarters:</strong><br>
    MY - COMPANY a.s.<br>
    Random Street 77<br>
    Random City
    

    您确定您的 dialog.xml 部署正确吗?也许仔细检查您的组件的对话框层次结构是否符合您在 CRXDE Lite 中的预期:

    【讨论】:

    • 我试过了,但它似乎不起作用...检查我的问题的编辑
    • @Jakolcz - 我想我对“只要你只创建一个段落”的条件不是很清楚。您的 html 中不能有任何段落标签,除非只有一组并且它包含整个字符串。如果您取出p 标签并在关闭strong 标签之后放置br 标签会发生什么?
    • &lt;p&gt; 标签被添加到我的文本的开头和结尾。
    • @Jakolcz - 我添加了一些额外的上下文。如果您只输入一个单词,它会添加p 标签吗?您是否使用 IE 作为浏览器?
    • 我在 Windows Server 上使用 Chrome,当我添加您在此处发布的 HTML 时,CQ 仍然添加 p 标签。我正在使用 CRX 编辑所有内容,所以层次结构看起来像你的。我将在一秒钟内添加我的屏幕
    【解决方案2】:

    属性removeSingleParagraphContainer应该添加到xtyperichtext的节点中。 示例:

    <text jcr:primaryType="cq:Widget"
       hideLabel="{Boolean}true"
       name="./text"
       height="{Long}520"
       removeSingleParagraphContainer="{Boolean}true"
       xtype="richtext">
    

    CRXDE 精简版:configuration in crxde lite

    注意:且此配置仅用于单段。

    参考:more info about removeSingleParagraphContainer

    【讨论】:

      【解决方案3】:

      尝试在您的代码中使用@context='html'。这使您可以将文本的上下文设置为 html,因此即使对话框值中有标签,它们也会被呈现为等效的 html,而不是页面上的标签。 例如: {properties.something @context='html'}

      【讨论】:

        【解决方案4】:

        对于 Touch UI,您还可以在 AEM Touch UI 中创建自定义 paraformat 选项,cq/gui/components/authoring/dialog/richtext,然后使用 Java Backend、Sling Model 对输出进行文本转换,因此您的 Sightly HTL 可以按预期呈现输出 Html。如需完整教程,您可以在此处找到。

        https://sourcedcode.com/blog/aem/aem-richtext-remove-p-tag-removesingleparagraphcontainer-for-touch-ui

        【讨论】:

          【解决方案5】:

          尝试在您的代码中使用 @context='unsafe'。你应该能够摆脱不必要的 HTML 标签,为我工作

          【讨论】:

            猜你喜欢
            • 2012-11-30
            • 2012-06-30
            • 2011-03-21
            • 2012-03-29
            • 2014-09-24
            • 1970-01-01
            • 2015-12-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多