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
ofaction
-
of eindigen met:
-src
, of-href
Bijvoorbeeld:
.../brooklyn-coat/master.plain.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
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:
-
Beide:
-
Het middeltype van het malplaatje (de aanvankelijke knoop) moet erven van:
cq/experience-fragments/components/xfpage
-
De naam van de sjabloon moet beginnen met:
experience-fragments
Met dit patroon kunnen gebruikers ervaringsfragmenten maken in /content/experience-fragments, aangezien de eigenschapcq:allowedTemplates
van deze map alle sjablonen bevat die een naam hebben die begint metexperience-fragment
. Klanten kunnen deze eigenschap bijwerken en hun eigen naamgevingsschema of sjabloonlocaties opnemen.
-
-
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.
De Experience Fragment Link Rewriter Provider - HTML the-experience-fragment-link-rewriter-provider-html
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.
Standaardkoppeling herschrijven default-link-rewriting
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:
-
De elementen
html
,head
enbody
worden vervangen doordiv
-elementen. De elementenmeta
,noscript
entitle
worden verwijderd (dit zijn onderliggende elementen van het oorspronkelijkehead
-element en worden niet meegenomen wanneer ze worden vervangen door hetdiv
-element).Dit proces wordt uitgevoerd om ervoor te zorgen dat de HTML Target-aanbieding kan worden opgenomen in doelactiviteiten.
-
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:
src
kenmerkenhref
kenmerken*-src
-kenmerken (zoalsdata-src
encustom-src
)*-href
-kenmerken (zoalsdata-href
,custom-href
enimg-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.
Interface Rewriter-provider koppelen link-rewriter-provider-interface
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
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();
}
Hoe te om de Interface van de Leverancier van de Verbinding te gebruiken Rewriter how-to-use-the-link-rewriter-provider-interface
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.
rewriteLink rewritelink
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
DeString
-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:
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;
}
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.