Creazione di componenti di layout personalizzati per i moduli adattivi :headding-anchor:creating-custom-layout-components-for-adaptive-forms

Prerequisito :headding-anchor:prerequisite

Conoscenza dei layout, che consente di creare/utilizzare un layout personalizzato. Vedere Modifica del layout del pannello.

Componente layout pannello modulo adattivo :headding-anchor:adaptive-form-panel-layout-component

Il componente Layout pannello modulo adattivo controlla il modo in cui i componenti del modulo adattivo vengono disposti in un pannello relativo all’interfaccia utente.

Creazione di un layout di pannello personalizzato :headding-anchor:creating-a-custom-panel-layout

  1. Passare alla posizione /crx/de.
  2. Copiare un layout di pannello dal percorso /libs/fd/af/layouts/panel (ad esempio, tabbedPanelLayout) a /apps (ad esempio, /apps/af-custom-layout).
  3. Rinominare il layout copiato in customPanelLayout. Modificare le proprietà dei nodi qtip e jcr:description. Ad esempio, modificarli in Custom layout - Toggle tabs.

qtip

Layout pannello personalizzato CRX DE Snapshot

NOTE
L'impostazione della proprietà guideComponentType sul valore fd/af/layouts/panel determina che il layout è un layout a pannello.
  1. Rinominare il file tabbedPanelLayout.jsp nel nuovo layout in customPanelLayout.jsp.

  2. Per introdurre nuovi stili e comportamenti, crea una libreria client sotto il nodo etc. Ad esempio, nella posizione /etc/af-custom-layout-clientlib, crea la libreria client del nodo. Lascia che il nodo abbia la proprietà categorie af.panel.custom. Ha i seguenti file .css e .js:

    code language-css
    /** CSS defining new styles used by custom layout **/
    
    .menu-nav {
        background-color: rgb(198, 38, 76);
        height: 30px;
     width: 30px;
     font-size: 2em;
     color: white;
        -webkit-transition: -webkit-transform 1s;  /* For Safari 3.1 to 6.0 */
     transition: transform 1s;
    }
    
    .tab-content {
     border: 1px solid #08b1cf;
    }
    
    .custom-navigation {
        -webkit-transition: width 1s, height 1s, -webkit-transform 1s;  /* For Safari 3.1 to 6.0 */
     transition: width 1s, height 1s, transform 1s;
    }
    
    .panel-name {
        padding-left: 30px;
        font-size: 20px;
    }
    
    @media (min-width: 992px) {
     .nav-close {
      width: 0px;
        }
    }
    
    @media (min-width: 768px) and (max-width: 991px) {
     .nav-close {
      height: 0px;
        }
    }
    
    @media (max-width: 767px) {
     .menu-nav, .custom-navigation {
         display: none;
        }
    }
    
    code language-javascript
    /** function for toggling the navigators **/
    var toggleNav = function () {
    
        var nav = $('.custom-navigation');
        if (nav) {
            nav.toggleClass('nav-close');
        }
    }
    
    /** function to populate the panel title **/
    $(window).on('load', function() {
        if (window.guideBridge) {
            window.guideBridge.on("elementNavigationChanged",
            function (evntName, evnt) {
                        var activePanelSom = evnt.newText,
                            activePanel = window.guideBridge._guideView.getView(activePanelSom);
                        $('.panel-name').html(activePanel.$itemNav.find('a').html());
                    }
            );
        }
    });
    
  3. Per migliorare l'aspetto e il comportamento, è possibile includere client library.

    Inoltre, aggiorna i percorsi degli script inclusi nei file .jsp. Aggiornare ad esempio il file customPanelLayout.jsp come segue:

    code language-html
    <%-- jsp encapsulating navigator container and panel container divs --%>
    
    <%@include file="/libs/fd/af/components/guidesglobal.jsp"%>
    <cq:includeClientLib categories="af.panel.custom"/>
    <div>
        <div class="row">
            <div class="col-md-2 col-sm-2 hidden-xs menu-nav glyphicon glyphicon-align-justify" onclick="toggleNav();"></div>
            <div class="col-md-10 col-sm-10 hidden-xs panel-name"></div>
        </div>
        <div class="row">
            <div class="col-md-2 hidden-xs guide-tab-stamp-list custom-navigation">
                <cq:include script = "/apps/af-custom-layout/customPanelLayout/defaultNavigatorLayout.jsp" />
            </div>
            <div  class="col-md-10">
                <c:if test="${fn:length(guidePanel.description) > 0}">
                    <div class="<%=GuideConstants.GUIDE_PANEL_DESCRIPTION%>">
                        ${guide:encodeForHtml(guidePanel.description,xssAPI)}
                            <cq:include script="/libs/fd/af/components/panel/longDescription.jsp"/>
                    </div>
                </c:if>
                <cq:include script = "/apps/af-custom-layout/customPanelLayout/panelContainer.jsp"/>
            </div>
        </div>
    </div>
    

    Il file /apps/af-custom-layout/customPanelLayout/defaultNavigatorLayout.jsp:

    code language-html
    <%-- jsp governing the navigation part --%>
    
    <%@include file="/libs/fd/af/components/guidesglobal.jsp"%>
    <%@ page import="com.adobe.aemds.guide.utils.StyleUtils" %>
    <%-- navigation tabs --%>
    <ul id="${guidePanel.id}_guide-item-nav-container" class="tab-navigators tab-navigators-vertical in"
        data-guide-panel-edit="reorderItems" role="tablist">
        <c:forEach items="${guidePanel.items}" var="panelItem">
            <c:set var="isNestedLayout" value="${guide:hasNestablePanelLayout(guidePanel,panelItem)}"/>
            <li id="${panelItem.id}_guide-item-nav" title="${guide:encodeForHtmlAttr(panelItem.navTitle,xssAPI)}" data-path="${panelItem.path}" role="tab" aria-controls="${panelItem.id}_guide-item">
                <c:set var="panelItemCss" value="${panelItem.cssClassName}"/>
                <% String panelItemCss = (String) pageContext.getAttribute("panelItemCss");%>
                <a data-guide-toggle="tab" class="<%= StyleUtils.addPostfixToClasses(panelItemCss, "_nav") %> guideNavIcon nested_${isNestedLayout}">${guide:encodeForHtml(panelItem.navTitle,xssAPI)}</a>
                <c:if test="${isNestedLayout}">
                    <guide:initializeBean name="guidePanel" className="com.adobe.aemds.guide.common.GuidePanel"
                        resourcePath="${panelItem.path}" restoreOnExit="true">
                        <sling:include path="${panelItem.path}"
                                       resourceType="/apps/af-custom-layout/customPanelLayout/defaultNavigatorLayout.jsp"/>
                    </guide:initializeBean>
                </c:if>
                <em></em>
            </li>
        </c:forEach>
    </ul>
    

    /apps/af-custom-layout/customPanelLayout/panelContainer.jsp aggiornato:

    code language-html
    <%-- jsp governing the panel content --%>
    
    <%@include file="/libs/fd/af/components/guidesglobal.jsp"%>
    
    <div id="${guidePanel.id}_guide-item-container" class="tab-content">
        <c:if test="${guidePanel.hasToolbar && (guidePanel.toolbarPosition == 'Top') }">
            <sling:include path="${guidePanel.toolbar.path}"/>
        </c:if>
    
    <c:forEach items="${guidePanel.items}" var="panelItem">
        <div class="tab-pane" id="${panelItem.id}_guide-item" role="tabpanel">
            <c:set var="isNestedLayout" value="${guide:hasNestablePanelLayout(guidePanel,panelItem)}"/>
            <c:if test="${isNestedLayout}">
                <c:set var="guidePanelResourceType" value="/apps/af-custom-layout/customPanelLayout/panelContainer.jsp" scope="request"/>
            </c:if>
            <sling:include path="${panelItem.path}" resourceType="${panelItem.resourceType}"/>
        </div>
    </c:forEach>
    <c:if test="${guidePanel.hasToolbar && (guidePanel.toolbarPosition == 'Bottom')}">
        <sling:include path="${guidePanel.toolbar.path}"/>
    </c:if>
    </div>
    
  4. Apri un modulo adattivo in modalità Authoring. Il layout del pannello definito viene aggiunto all'elenco per la configurazione dei layout del pannello.

    Il layout del pannello personalizzato viene visualizzato nellelenco di layout del pannello Schermata del modulo adattivo che utilizza il layout del pannello personalizzato Schermata che illustra la funzionalità di attivazione/disattivazione del layout personalizzato

Esempio di ZIP per il layout di un pannello personalizzato e per un modulo adattivo che lo utilizza.

Ottieni file

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2