Ervaar fragmenten experience-fragments

De basisbeginselen the-basics

Een Fragment van de Ervaringis een groep van één of meerdere componenten met inbegrip van inhoud en lay-out die binnen pagina's van verwijzingen kunnen worden voorzien.

Een Master of Variant van het Fragment van de Ervaring, of beide, gebruikt:

  • sling:resourceType : /libs/cq/experience-fragments/components/xfpage

Omdat er geen /libs/cq/experience-fragments/components/xfpage/xfpage.html is, wordt het opnieuw ingesteld op

  • sling:resourceSuperType : wcm/foundation/components/page

De normale HTML-vertoning the-plain-html-rendition

Met de kiezer .plain. in de URL hebt u toegang tot de uitvoering van normale HTML.

Deze vertoning is beschikbaar in de browser. Het primaire doel is echter om andere toepassingen (bijvoorbeeld webapps van derden, aangepaste mobiele implementaties) rechtstreeks toegang te geven tot de inhoud van het Experience Fragment door alleen de URL te gebruiken.

Met de uitvoering voor normale HTML worden het protocol, de host en het contextpad toegevoegd aan paden die:

  • van het type: src, href of action

  • of eindigen met: -src, of -href

Bijvoorbeeld:

.../brooklyn-coat/master.plain.html

NOTE
Koppelingen verwijzen altijd naar de publicatie-instantie. Ze zijn bedoeld voor gebruik door derden. De koppeling wordt dus altijd aangeroepen vanuit het publicatie-exemplaar en niet vanuit de auteur-instantie.
Voor verdere informatie zie het externaliseren URLs.

Onbewerkte vertoning van de HTML

De selector voor normale uitvoering gebruikt een transformator in plaats van aanvullende scripts. het Verschuiven Rewriterwordt gebruikt als transformator. Deze transformator wordt gevormd bij het volgende:

  • /libs/experience-fragments/config/rewriter/experiencefragments

De generatie van de HTML-uitvoering configureren configuring-html-rendition-generation

De uitvoering van de HTML wordt gegenereerd met behulp van de Sling Rewriter Pipelines. De pijpleiding wordt bepaald bij /libs/experience-fragments/config/rewriter/experiencefragments. De transformator van de HTML steunt de volgende opties:

  • allowedCssClasses

    • Een RegEx-expressie die overeenkomt met de CSS-klassen die in de uiteindelijke uitvoering moeten blijven staan.
    • Deze optie is handig als de klant bepaalde CSS-klassen wil verwijderen
  • allowedTags

    • Een lijst met HTML-tags die zijn toegestaan in de uiteindelijke uitvoering.
    • Standaard zijn de volgende tags toegestaan (geen configuratie vereist): html, head, title, body, img, p, span, ul, li, a, b, i, em, strong, h1, h2, h3, h4, h5, h6, br, noscript, div, link en script

Adobe raadt aan de rewriter te configureren met behulp van een overlay. Zie Bedekkingen in AEM as a Cloud Service.

Sjablonen voor ervaringsfragmenten templates-for-experience-fragments

CAUTION
slechts editable malplaatjes worden gesteund voor de Fragmenten van de Ervaring.
De Fragmenten van de ervaring kunnen slechts op pagina's worden gebruikt die op editable malplaatjes gebaseerd zijn.

Wanneer u een nieuwe sjabloon ontwikkelt voor Experience Fragments, kunt u de standaardwerkwijzen volgen voor een bewerkbare sjabloon.

Om een malplaatje van het Fragment van de Ervaring tot stand te brengen dat door wordt ontdekt creeer de tovenaar van het Fragment van de Ervaring, moet u één van deze regelreeksen volgen:

  1. Beide:

    1. Het middeltype van het malplaatje (de aanvankelijke knoop) moet erven van:

      cq/experience-fragments/components/xfpage

    2. De naam van de sjabloon moet beginnen met:

      experience-fragments
      Met dit patroon kunnen gebruikers ervaringsfragmenten maken in /content/experience-fragments, aangezien de eigenschap cq:allowedTemplates van deze map alle sjablonen bevat die een naam hebben die begint met experience-fragment . Klanten kunnen deze eigenschap bijwerken en hun eigen naamgevingsschema of sjabloonlocaties opnemen.

  2. Toegestane malplaatjeskunnen in de console van de Fragmenten van de Ervaring worden gevormd.

Componenten voor ervaringsfragmenten components-for-experience-fragments

Het ontwikkelen van componenten voor gebruik met/in de Fragmenten van de Ervaring volgt standaardpraktijken.

De enige extra configuratie moet ervoor zorgen dat de componenten op het malplaatje worden toegestaan. Deze mogelijkheid wordt bereikt met het inhoudsbeleid.

In AEM hebt u de mogelijkheid om ervaringsfragmenten te maken. Een ervaringsfragment:

  • bestaat uit een groep componenten samen met een lay-out;
  • kan onafhankelijk van een AEM pagina bestaan.

Een van de gebruiksgevallen voor dergelijke groepen is het insluiten van inhoud in aanraakpunten van derden, zoals Adobe Target.

Met de functie Exporteren naar doel kunt u:

  • een fragment van de Ervaring tot stand brengen,
  • er componenten aan toevoegen,
  • en exporteer het vervolgens als een Adobe Target-aanbieding in de indeling HTML of JSON.

Deze functie kan worden ingeschakeld op een instantie van AEM. Het vereist een geldige Configuratie van Adobe Target, en configuraties voor de Verbinding Externalzer.

De Verbinding ExternalAlizer wordt gebruikt om correcte URLs te bepalen nodig wanneer het creëren van de versie van de HTML van het Voorstel van het Doel, dat dan naar Adobe Target wordt verzonden. Dit proces is noodzakelijk aangezien Adobe Target vereist dat alle verbindingen binnen de Aanbieding van de HTML van het Doel openbaar kunnen worden betreden. Het betekent dat alle bronnen waarnaar de koppelingen verwijzen, en het ervaringsfragment zelf, moeten worden gepubliceerd voordat ze kunnen worden gebruikt.

Wanneer u een Target HTML-aanbieding samenstelt, wordt standaard een aanvraag verzonden naar een aangepaste Sling-kiezer in AEM. Deze kiezer wordt .nocloudconfigs.html genoemd. Zoals de naam al aangeeft, wordt een GPU-rendering van een Experience-fragment gemaakt, maar worden cloudconfiguraties niet opgenomen (wat overbodige informatie zou zijn).

Nadat u de pagina van de HTML produceert, wordt de Sling Rewriter pijpleiding gewijzigd aan de output:

  1. De elementen html , head en body worden vervangen door div -elementen. De elementen meta , noscript en title worden verwijderd (dit zijn onderliggende elementen van het oorspronkelijke head -element en worden niet meegenomen wanneer ze worden vervangen door het div -element).

    Dit proces wordt uitgevoerd om ervoor te zorgen dat de HTML Target-aanbieding kan worden opgenomen in doelactiviteiten.

  2. AEM wijzigt om het even welke interne verbindingen aanwezig in de HTML, zodat zij aan een gepubliceerde middel richten.

    Als u wilt bepalen welke koppelingen moeten worden gewijzigd, AEM u dit patroon voor kenmerken van HTML-elementen volgt:

    1. src kenmerken
    2. href kenmerken
    3. *-src -kenmerken (zoals data-src en custom-src )
    4. *-href -kenmerken (zoals data-href , custom-href en img-href )
    note note
    NOTE
    De interne koppelingen in de HTML zijn relatieve koppelingen, maar er kunnen zich gevallen voordoen waarin aangepaste componenten volledige URL's in de HTML bevatten. Standaard worden deze volledige URL's genegeerd en worden geen wijzigingen aangebracht.

    De koppelingen in deze kenmerken worden via de AEM Link Externalzer publishLink() uitgevoerd om de URL opnieuw te maken alsof deze zich op een gepubliceerde instantie bevindt en als zodanig openbaar te maken.

Als u een implementatie buiten de doos gebruikt, moet het hierboven beschreven proces voldoende zijn om het doelaanbod te genereren op basis van het ervaringsfragment en het vervolgens te exporteren naar Adobe Target. Er zijn echter enkele gebruiksgevallen die in dit proces niet in aanmerking worden genomen. Enkele van deze gevallen die niet in aanmerking worden genomen omvatten het volgende:

  • Sling Mapping beschikbaar op alleen de publicatie-instantie
  • Dispatcher omleiding

Voor deze gebruiksgevallen, verstrekt AEM de Interface van de Leverancier van de Verbinding Rewriter.

Voor meer gecompliceerde gevallen, die niet door het gebrekworden behandeld, biedt AEM de Interface van de Leverancier van de Verbinding Rewriter aan. Deze interface is een ConsumerType -interface die u als service in uw bundels kunt implementeren. Het omzeilt de aanpassingen AEM op interne verbindingen van een aanbieding van de HTML zoals die van een Fragment van de Ervaring worden teruggegeven uitvoeren. Met deze interface kunt u het herschrijven van interne HTML-koppelingen aanpassen aan uw bedrijfsbehoeften.

Voorbeelden van gebruiksgevallen om deze interface als dienst uit te voeren omvatten:

  • Sling Mappings worden ingeschakeld op de publicatie-instanties, maar niet op de auteurinstantie
  • Een Dispatcher of vergelijkbare technologie wordt gebruikt om URL's intern om te leiden
  • sling:alias mechanisms zijn ingesteld voor bronnen
NOTE
Deze interface verwerkt alleen de interne HTML-koppelingen van het gegenereerde doelaanbod.

De Link Rewriter Provider Interface ( ExperienceFragmentLinkRewriterProvider) ziet er als volgt uit:

public interface ExperienceFragmentLinkRewriterProvider {

    String rewriteLink(String link, String tag, String attribute);

    boolean shouldRewrite(ExperienceFragmentVariation experienceFragment);

    int getPriority();

}

Om de interface te gebruiken, moet u eerst een bundel tot stand brengen die een nieuwe de dienstcomponent bevat die de interface van de Leverancier van Rewriter van de Verbinding uitvoert.

Deze service wordt gebruikt om in het dialoogvenster Exporteren naar doel van ervaringsfragment te stoppen zodat deze toegang kan hebben tot de verschillende koppelingen.

Bijvoorbeeld ComponentService :

import com.adobe.cq.xf.ExperienceFragmentLinkRewriterProvider;
import com.adobe.cq.xf.ExperienceFragmentVariation;
import org.osgi.service.component.annotations.Service;
import org.osgi.service.component.annotations.Component;

@Component
@Service
public class GeneralLinkRewriter implements ExperienceFragmentLinkRewriterProvider {

    @Override
    public String rewriteLink(String link, String tag, String attribute) {
        return null;
    }

    @Override
    public boolean shouldRewrite(ExperienceFragmentVariation experienceFragment) {
        return false;
    }

    @Override
    public int getPriority() {
        return 0;
    }

}

Voor de dienst aan het werk, zijn er nu drie methodes die binnen de dienst moeten worden uitgevoerd:

  • [shouldRewrite](#shouldrewrite)

  • [rewriteLink](#rewritelink)

    • rewriteLinkExample2
  • [getPriority](#priorities-getpriority)

shouldRewrite shouldrewrite

Wijs aan het systeem of het de verbindingen moet herschrijven wanneer een vraag voor de Uitvoer aan Doel op een bepaalde verandering van het Fragment van de Ervaring wordt gemaakt. U kunt de volgende methode implementeren:

shouldRewrite(ExperienceFragmentVariation experienceFragment);

Bijvoorbeeld:

@Override
public boolean shouldRewrite(ExperienceFragmentVariation experienceFragment) {
    return experienceFragment.getPath().equals("/content/experience-fragment/master");
}

Deze methode ontvangt, als parameter, de Variatie van het Fragment van de Ervaring die de Uitvoer naar systeem van het Doel herschrijft.

In het bovenstaande voorbeeld wilt u het volgende herschrijven:

  • koppelingen aanwezig in src

  • href alleen kenmerken

  • voor een specifiek ervaringsfragment:
    /content/experience-fragment/master

Eventuele andere Erviteitsfragmenten die door het systeem Exporteren naar doel worden doorgegeven, worden genegeerd en niet beïnvloed door wijzigingen die in deze service worden geïmplementeerd.

Voor de wijziging van het Fragment van de Ervaring die door het herschrijfproces wordt beïnvloed, gaat het dan te werk om de de diensthandvat de verbinding te laten herschrijven. Telkens wanneer een koppeling wordt aangetroffen in de interne HTML, wordt de volgende methode aangeroepen:

rewriteLink(String link, String tag, String attribute)

De methode ontvangt de parameters als invoer:

  • link
    De String -representatie van de koppeling die wordt verwerkt. Deze vertegenwoordiging is gewoonlijk relatieve URL die aan het middel op de auteursinstantie richten.

  • tag
    De naam van het HTML-element dat wordt verwerkt.

  • attribute
    De exacte kenmerknaam.

Als het systeem Exporteren naar doel dit element bijvoorbeeld verwerkt, kunt u CSSInclude als volgt definiëren:

<link rel="stylesheet" href="/etc.clientlibs/foundation/clientlibs/main.css" type="text/css">

De aanroep van de methode rewriteLink() wordt uitgevoerd met de volgende parameters:

rewriteLink(link="/etc.clientlibs/foundation/clientlibs/main.css", tag="link", attribute="href" )

Wanneer u de dienst creeert, zijn uw besluiten gebaseerd op de bepaalde input, en herschrijven dan dienovereenkomstig de verbinding.

U wilt bijvoorbeeld het /etc.clientlibs -gedeelte van de URL verwijderen en het juiste externe domein toevoegen. Om dingen eenvoudig te houden, denk dat u toegang tot een Resolver van het Middel voor uw dienst, zoals in rewriteLinkExample2 hebt:

NOTE
Voor meer informatie over hoe te om een middeloplosser door een de dienstgebruiker te krijgen zie de Gebruikers van de Dienst in AEM.
private ResourceResolver resolver;

private Externalizer externalizer;

@Override
public String rewriteLink(String link, String tag, String attribute) {

    // get the externalizer service
    externalizer = resolver.adaptTo(Externalizer.class);
    if(externalizer == null) {
        // if there was an error, then we do not modify the link
        return null;
    }

    // remove leading /etc.clientlibs from resource link before externalizing
    link = link.replaceAll("/etc.clientlibs", "");

    // considering that we configured our publish domain, we directly apply the publishLink() method
    link = externalizer.publishLink(resolver, link);

    return link;
}
NOTE
Als de bovenstaande methode null retourneert, laat het systeem Exporteren naar doel de koppeling zoals deze is, een relatieve koppeling naar een bron.

Prioriteiten - getPriority priorities-getpriority

Het is niet ongebruikelijk om verscheidene diensten te nodig om voor verschillende soorten Fragments van de Ervaring te behandelen, of zelfs om een Generische Dienst te hebben die het externaliseren en in kaart brengen voor alle Fragments van de Ervaring behandelt. In deze gevallen, conflicten waarover de dienst aan gebruik zich zou kunnen voordoen, zodat AEM de mogelijkheid verstrekt om Prioriteiten voor de verschillende diensten te bepalen. De prioriteiten worden bepaald volgens de methode:

  • getPriority()

Met deze methode kunt u verschillende services gebruiken waarbij de methode shouldRewrite() true retourneert voor hetzelfde ervaringsfragment. De dienst die het hoogste aantal van zijn getPriority() methode terugkeert is de dienst die de Variatie van het Fragment van de Ervaring behandelt.

Als voorbeeld kunt u een GenericLinkRewriterProvider hebben die de basistoewijzing voor alle fragmenten van de Ervaring behandelt en wanneer de shouldRewrite() methode true voor alle Variaties van het Fragment van de Ervaring terugkeert. Voor verschillende specifieke ervaringsfragmenten wilt u wellicht speciale afhandeling. In dit geval kunt u dus een SpecificLinkRewriterProvider opgeven waarvoor de methode shouldRewrite() alleen waar retourneert voor bepaalde Ervings-fragmentvariaties. Om ervoor te zorgen dat SpecificLinkRewriterProvider wordt gekozen voor het verwerken van deze Experience Fragment-variaties, moet het in de getPriority() -methode een hoger getal retourneren dan GenericLinkRewriterProvider.

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab