5

如何仅在 AEM 的预览/发布模式下删除装饰标签?

我看过问答:AEM/CQ: Conditional CSS class on decoration tag

这删除了装饰,但阻止了我编辑组件,因为它也删除了编辑和设计模式下的装饰。需要什么条件才能仅删除预览/发布中的装饰标签?

我还看到可以将以下代码添加到我的 java-use 类的 activate 方法中:

if (!getWcmMode().isEdit() && !getWcmMode().isDesign()) {
           IncludeOptions.getOptions(getRequest(), true).setDecorationTagName("");
    }

这将删除除一个装饰标签之外的所有装饰标签,请参见下面的示例:

wcmmode=disabled 中的 HTML 在 activate 方法中没有上述代码:

<ul class="timeline">
    <div class="section timelineTag">
    <div class="section timelineTag">
    <div class="section timelineTag">
    <li class="clear"></li>
</ul>

wcmmode=disabled 中的 HTML 与 activate 方法中的上述代码:

<ul class="timeline">
    <div class="section timelineTag">
    <li class="event" href="#">
    <li class="event" href="#">
    <li class="clear"></li>
</ul>

如何删除 ul 中的第一个装饰 DIV 标记,因为当我将指定代码添加到激活方法时它不会消失?

根据此处的要求,详细查看相关组件(更新于 2015 年 7 月 5 日):

Java 类

public class TimelineClass extends WCMUse {

    @Override
    public void activate() throws Exception {
        //Remove default wrapping performed by AEM for the preview mode 
        if (!getWcmMode().isEdit() && !getWcmMode().isDesign()) {
               IncludeOptions.getOptions(getRequest(), true).setDecorationTagName("");
        }   
    }
}

HTML 代码: - 这涉及两个组件。首先是包含 ul 标签的容器组件 - 然后是从 Sidekick 拖放到容器中的标签组件,以在发布时创建上面显示的列表。

容器代码:

<div class="az-timeline row">
<section class="small-12 columns">
    <section class="wrapper">
        <ul class="timeline">
            <!-- /* The parsys where all of the timeline tags will be dropped */ -->
            <div data-sly-resource="${'par-wrapper' @ resourceType='foundation/components/parsys'}" data-sly-unwrap></div>  
            <li class="clear"></li>
        </ul>
    </section>  
</section>

标签组件被拖放到上面的容器 parsys 中:

<li data-sly-use.timelineTag="TimelineClass" class="event" href="#">
    <img style="width: 165px;" data-sly-test="${properties.outerImage}" alt="placeholder" src="${properties.outerImage}"/>
    <article>
        <h5>${properties.heading || 'Timeline heading'}</h5>
        <h4>${properties.subheading || 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt labore molestias perspiciatis reiciendis.'}</h4>
        <p>${properties.text || 'Sed molestie, mauris sit amet egestas malesuada, felis magna commodo urna, vel consequat lorem enim ac diam. Aenean eget ex vitae enim cursus facilisis ac feugiat nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.'}</p>
        <img style="height: 130px;" data-sly-test="${properties.innerImage}" alt="" src="${properties.innerImage}" />
        <a data-sly-test="${properties.link}" class="az-sbButton" href="${properties.link}">${properties.linkText || 'More'}<span class="owi-az-linkIcon internal"></span></a>
    </article>
</li>

几个标签组件被拖放到容器中的 parsys 中,wcmmode=disabled 的结果是上面显示的第二个 ul,列表中的第一项被 div 标签包围

4

5 回答 5

1

我还没有使用 Sightly 的东西,但是通过在 JCR 中的组件上分配属性“cq:noDecoration”(布尔值设置为 true),我成功地删除了额外的 div。试试看是否有帮助。

于 2015-02-02T21:48:19.087 回答
0

如果我理解正确并且您希望 div.section.timelineTag 仅在编辑模式下出现,那么代码将是

<ul>
  <div data-sly-test="${wcmmode.edit}" class="section timelineTag">
于 2015-02-05T09:29:00.610 回答
0

使用 data-sly-unwrap。请参阅这篇文章和来自 adobe http://www.aemmastery.com/2015/04/24/remove-div-tags-sightly/的参考文档

“data-sly-unwrap:从生成的标记中删除宿主元素,同时保留其内容。”

另一种选择,将 cq:htmlTag 设置为“”: http ://dev.day.com/cemblog/en/experiencedelivers/2013/04/modify_the_auto-generateddivs.html

于 2015-04-24T06:59:04.943 回答
0

正如 Rampant 建议的那样,但将时间线 ul 作为组件的一部分并尝试将 cq:htmlTag 设置为“ul”并给它一个类时间线:您仍然可以编辑组件并且它不会弄乱显示。http://dev.day.com/cemblog/en/experiencedelivers/2013/04/modify_the_auto-generateddivs.html

于 2015-05-26T20:16:28.273 回答
0

在编辑/预览模式示例中,当您需要有条件地删除 Sightly 中的装饰标签时,该问题的可能解决方法:

  1. 为您的组件(“父组件”)创建两个子组件 - “编辑视图”和“预览视图”。
  2. 对于“编辑视图”组件集 cq:noDecoration="{Boolean}false"
  3. 对于“预览视图”组件集 cq:noDecoration="{Boolean}true"
  4. 在 parent-component.html 添加条件渲染,如:
 <sly data-sly-test="${isEditMode}">
      <sly data-sly-resource="${'editViewResourceName' @ resourceType='yourapp/components/parent-component/edit-view'}"></sly>
  </sly>   

<sly data-sly-test="${isPreviewMode}">
    <sly data-sly-resource="${'editViewResourceName' @ resourceType='yourapp/components/parent-component/preview-view'}"></sly>
</sly>

提示

  1. 仅为“编辑视图”组件添加对话框。
  2. 对于“预览视图”组件,您只能保留 .content.xml 和 preview-view.html
  3. 为了避免代码重复,可以使用类似的结构将“编辑视图”包含到“预览视图”中
<sly data-sly-resource="${currentNode.path @ resourceType='yourapp/components/parent-component/edit-view'}"></sly>
于 2016-10-07T11:47:32.680 回答