Voor bepaalde functionaliteit van contentfragment is de toepassing van AEM 6.4 Service Pack 2 (6.4.2.0) vereist.
Een inhoudsfragment breidt een standaardelement uit; zie:
Inhoudsfragmenten en pagina's ontwerpen en beheren met inhoudfragmenten voor meer informatie over inhoudsfragmenten.
Het beheren van Activa en het Aanpassen en het Uitbreiden Activa voor verdere informatie over standaardactiva.
De samenstellende delen van een inhoudsfragment zijn:
Afhankelijk van het type fragment worden ook modellen of sjablonen gebruikt:
Het wordt nu aanbevolen om al uw fragmenten te maken.
De fragmentmodellen van de inhoud worden gebruikt voor alle voorbeelden in Wij.Retail.
Modellen van contentfragmenten:
Wijzigingen in een bestaand inhoudsfragmentmodel kunnen van invloed zijn op afhankelijke fragmenten. dit kan leiden tot weeseigenschappen in die fragmenten .
Sjablonen voor inhoudsfragmenten:
CFM (Content Fragment Management) maakt deel uit van AEM Assets als:
Inhoudsfragmenten met gestructureerde inhoud (d.w.z. gebaseerd op een inhoudsfragmentmodel) worden toegewezen aan één element:
Alle inhoud wordt opgeslagen onder de jcr:content/data
-node van het element:
De elementgegevens worden opgeslagen onder het master subknooppunt:
jcr:content/data/master
Variaties worden opgeslagen onder een subknooppunt met de naam van de variatie:
bijv. jcr:content/data/myvariation
De gegevens van elk element worden in het desbetreffende subknooppunt opgeslagen als een eigenschap met de elementnaam:
De inhoud van element text
wordt bijvoorbeeld als eigenschap text
op jcr:content/data/master
opgeslagen
Metagegevens en bijbehorende inhoud worden onder jcr:content/metadata
opgeslagen
Met uitzondering van de titel en beschrijving, die niet als traditionele metagegevens worden beschouwd en worden opgeslagen op jcr:content
Eenvoudige inhoudsfragmenten (gebaseerd op een sjabloon) worden toegewezen aan een samenstelling die bestaat uit een hoofdelement en (optionele) subelementen:
Alle niet-inhoudinformatie van een fragment (zoals titel, beschrijving, metagegevens, structuur) wordt uitsluitend beheerd op het hoofdelement.
De inhoud van het eerste element van een fragment wordt toegewezen aan de oorspronkelijke uitvoering van het hoofdelement.
Aanvullende elementen (indien aanwezig) worden toegewezen aan subactiva van het hoofdactief.
Net als bij standaardelementen wordt een inhoudsfragment opgeslagen onder:
/content/dam
Zie Inhoudsfragment - Overwegingen verwijderen voor meer informatie.
De Content Fragment Core Component wordt nu aanbevolen. Zie Core Components ontwikkelen voor meer informatie.
Vanuit AEM pagina's kan naar inhoudsfragmenten worden verwezen, net als met elk ander elementtype. AEM biedt de kerncomponent van het inhoudsfragment - een component waarmee u inhoudsfragmenten op uw pagina's kunt opnemen. U kunt ook de kerncomponent Content Fragment uitbreiden.
De component gebruikt de eigenschap fragmentPath
om naar het daadwerkelijke inhoudsfragment te verwijzen. De fragmentPath
-eigenschap wordt op dezelfde wijze afgehandeld als soortgelijke eigenschappen van andere soorten activa; bijvoorbeeld wanneer het inhoudsfragment naar een andere locatie wordt verplaatst.
Met de component kunt u de variatie selecteren die moet worden weergegeven.
Bovendien kan een reeks alinea's worden geselecteerd om de uitvoer te beperken; Dit kan bijvoorbeeld worden gebruikt voor uitvoer met meerdere kolommen.
De component staat in-tussen inhoud toe:
Voor tussenliggende inhoud moet u:
Inhoudsfragmentmodel:
Wanneer u een inhoudsfragment gebruikt dat is gebaseerd op een inhoudsfragmentmodel op een pagina, wordt naar het model verwezen. Dit betekent dat als het model niet is gepubliceerd op het moment dat u de pagina publiceert, dit wordt gemarkeerd en het model wordt toegevoegd aan de bronnen die met de pagina moeten worden gepubliceerd.
Sjabloon inhoudsfragment:
Wanneer u een inhoudsfragment gebruikt dat is gebaseerd op een inhoudsfragmentsjabloon op een pagina, is er geen verwijzing omdat de sjabloon is gekopieerd bij het maken van het fragment.
De back-endimplementatie van inhoudsfragmenten is bijvoorbeeld verantwoordelijk voor het maken van instanties van een fragment dat wordt gebruikt op een pagina die kan worden doorzocht, of voor het beheren van gemengde media-inhoud. Deze implementatie moet weten welke componenten worden gebruikt voor het renderen van fragmenten en hoe de rendering wordt geparametriseerd.
De parameters voor dit kunnen in de Console van het Web , voor de bundel OSGi DAM de Configuratie van de Fragments van de Inhoud worden gevormd.
Brontypen
Er kan een lijst met sling:resourceTypes
worden opgegeven om componenten te definiëren die worden gebruikt voor het renderen van inhoudsfragmenten en waar de achtergrondverwerking moet worden toegepast.
Referentie-eigenschappen
Een lijst met eigenschappen kan worden geconfigureerd om op te geven waar de verwijzing naar het fragment wordt opgeslagen voor de desbetreffende component.
Er is geen directe toewijzing tussen eigenschap en componenttype.
AEM gebruikt gewoon de eerste eigenschap die op een alinea staat. U moet de eigenschappen dus zorgvuldig kiezen.
Er zijn nog enkele richtlijnen die u moet volgen om ervoor te zorgen dat de component compatibel is met de achtergrondverwerking van het inhoudsfragment:
De naam van de eigenschap waar het element of de elementen worden gerenderd, moet element
of elementNames
zijn.
De naam van de eigenschap waar de te renderen variatie is gedefinieerd, moet variation
of variationName
zijn.
Als de uitvoer van meerdere elementen wordt ondersteund (door elementNames
te gebruiken om meerdere elementen op te geven), wordt de werkelijke weergavemodus gedefinieerd door eigenschap displayMode
:
singleText
is (en er slechts één gevormd element is), dan wordt het element teruggegeven als tekst met inwendige inhoud, lay-outsteun, enz. Dit is de standaardinstelling voor fragmenten waarbij slechts één element wordt gerenderd.Als het fragment wordt gerenderd voor displayMode
== singleText
(impliciet of expliciet), worden de volgende aanvullende eigenschappen in spel gezet:
paragraphScope
definieert of alle alinea's, of alleen een reeks alinea's, moeten worden gerenderd (waarden: all
vs range
)paragraphScope
== range
dan bepaalt het bezit paragraphRange
de waaier van paragrafen die moeten worden teruggegevenInhoudsfragmenten kunnen worden geïntegreerd met:
Vertalingen
Inhoudsfragmenten zijn volledig geïntegreerd met de vertaalworkflow AEM. Op architectonisch niveau betekent dit:
De afzonderlijke vertalingen van een inhoudsfragment zijn eigenlijk afzonderlijke fragmenten. bijvoorbeeld:
zij bevinden zich in verschillende taalgebieden :
/content/dam/<path>/en/<to>/<fragment>
vs
/content/dam/<path>/de/<to>/<fragment>
maar ze delen exact hetzelfde relatieve pad onder de hoofdmap van de taal :
/content/dam/<path>/en/<to>/<fragment>
vs
/content/dam/<path>/de/<to>/<fragment>
Naast de op regel gebaseerde paden bestaat er geen verdere verbinding tussen de verschillende taalversies van een inhoudsfragment. ze worden behandeld als twee afzonderlijke fragmenten, hoewel de interface de mogelijkheid biedt om tussen de taalvarianten te navigeren.
De AEM vertaalworkflow werkt met /content
:
/conf
verblijven, zijn deze niet inbegrepen in dergelijke vertalingen. U kunt de UI-tekenreeksen internationaliseren.Metagegevensschema's
CFM biedt een eigen, specifiek schema:
/libs/dam/content/schemaeditors/forms/contentfragment
dit kan zo nodig worden verlengd .
Het respectievelijke schema-formulier is geïntegreerd met de fragmenteditor.
U kunt de server-kant API gebruiken om tot uw inhoudsfragmenten toegang te hebben; zie:
com.adobe.cq.dam.cfm
Het wordt ten zeerste aanbevolen de server-side API te gebruiken in plaats van rechtstreeks toegang te krijgen tot de inhoudsstructuur.
De volgende drie interfaces kunnen als ingangspunten dienen:
Fragmentsjabloon
FragmentTemplate
Gebruik FragmentTemplate.createFragment()
om een nieuw fragment te maken.
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Deze interface vertegenwoordigt:
Deze informatie kan omvatten:
Toegang tot basisgegevens (titel, beschrijving)
Sjablonen/modellen openen voor de elementen van het fragment:
ElementTemplate
)Sjablonen openen voor de variaties van het fragment:
VariationTemplate
)Aanvankelijke gekoppelde inhoud ophalen
Interfaces die belangrijke informatie vertegenwoordigen:
ElementTemplate
VariationTemplate
Inhoudsfragment
ContentFragment
Met deze interface kunt u op abstracte wijze werken met een inhoudsfragment.
Het wordt sterk geadviseerd om tot een fragment door deze interface toegang te hebben. Het rechtstreeks wijzigen van de inhoudsstructuur moet worden vermeden.
De interface voorziet u van de middelen:
Basisgegevens beheren (bijvoorbeeld naam ophalen; get/set titel/beschrijving)
Toegang tot metagegevens
Toegangselementen:
ContentElement
)Variaties weergeven die zijn gedefinieerd voor het fragment
Nieuwe variaties wereldwijd maken
Gekoppelde inhoud beheren:
Open het model of de sjabloon van het fragment
De interfaces die de belangrijkste elementen van een fragment vertegenwoordigen zijn:
Inhoud-element
ContentElement
Basisgegevens ophalen (naam, titel, beschrijving)
Inhoud ophalen/instellen
Toegang tot variaties van een element:
ContentVariation
)Sneltoets voor het oplossen van variaties (door een aanvullende, implementatiespecifieke fallback-logica toe te passen als de opgegeven variatie niet beschikbaar is voor een element)
Inhoudsvariatie
ContentVariation
Alle drie interfaces ( ContentFragment
, ContentElement
, ContentVariation
) breiden de Versionable
interface uit, die versiemogelijkheden toevoegt, die voor inhoudsfragmenten worden vereist:
Het volgende kan worden aangepast:
ContentFragment
kan worden aangepast aan:
Resource
- de onderliggende sloopbron; Let erop dat u het Resource
object opnieuw moet opbouwen wanneer u de onderliggende waarde ContentFragment
rechtstreeks bijwerkt.Asset
- de DAM- Asset
abstractie die het inhoudsfragment vertegenwoordigt; Let erop dat het Asset
rechtstreeks bijwerken van het ContentFragment
object opnieuw moet worden opgebouwd.ContentElement
kan worden aangepast aan:
ElementTemplate
- voor toegang tot de structurele informatie van het element.FragmentTemplate
kan worden aangepast aan:
Resource
- het Resource
bepalen van het model waarnaar wordt verwezen of de oorspronkelijke sjabloon die is gekopieerd;
Resource
worden niet automatisch doorgevoerd in FragmentTemplate
.Resource
kan worden aangepast aan:
ContentFragment
FragmentTemplate
Er zij op gewezen dat:
De API is geïmplementeerd om functionaliteit te bieden die door de UI wordt ondersteund.
De gehele API is ontworpen om automatisch wijzigingen te behouden en niet (tenzij anders vermeld in de API JavaDoc). Zo zult u altijd de middeloplosser van het respectieve verzoek (of resolver moeten begaan u eigenlijk gebruikt).
Taken die extra inspanning zouden kunnen vereisen:
ContentElement
, wordt de gegevensstructuur niet bijgewerkt (maar worden deze globaal gemaakt op basis van ContentFragment
).Voor AEM 6.4 is de client-side API intern.
Zie het volgende:
filter.xml
filter.xml
voor inhoudsfragmentbeheer is zo geconfigureerd dat het niet overlapt met het elementeninhoudspakket.
Er wordt een bewerkingssessie gestart wanneer de gebruiker een inhoudsfragment opent in een van de editorpagina's. De bewerkingssessie wordt beëindigd wanneer de gebruiker de editor verlaat door Opslaan of Annuleren te selecteren.
Vereisten voor het besturen van een bewerkingssessie zijn:
Het gaat om de volgende processen:
Een sessie starten
Een sessie voltooien
Automatisch opslaan wordt gestopt.
Bij toewijzen:
Bij terugdraaien:
Bewerken
De mogelijke acties zijn:
Pagina's invoeren
Controleren of er al een bewerksessie aanwezig is; door de betreffende cookie te controleren.
Als er een bestaat, controleert u of de bewerkingssessie is gestart voor het inhoudsfragment dat momenteel wordt bewerkt
Als er geen bewerkingssessie bestaat, wacht u op de eerste wijziging die de gebruiker heeft aangebracht (zie hieronder).
Controleer of er al naar het inhoudsfragment wordt verwezen op een pagina en geef zo ja de juiste informatie weer.
Inhoud wijzigen
Pagina's verlaten
Hiertoe kunt u de bron die de API vertegenwoordigt aanpassen aan:
com.adobe.cq.dam.cfm.ContentFragment
Bijvoorbeeld:
// first, get the resource
Resource fragmentResource = resourceResolver.getResource("/content/dam/fragments/my-fragment");
// then adapt it
if (fragmentResource != null) {
ContentFragment fragment = fragmentResource.adaptTo(ContentFragment.class);
// the resource is now accessible through the API
}
Als u programmatisch een nieuw inhoudsfragment wilt maken, moet u het volgende gebruiken:
com.adobe.cq.dam.cfm.ContentFragmentManager#create
Bijvoorbeeld:
Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
Het interval voor automatisch opslaan (gemeten in seconden) kan worden gedefinieerd met behulp van configuratiebeheer (ConfMgr):
Knooppunt: <conf-root>/settings/dam/cfm/jcr:content
Naam eigenschap: autoSaveInterval
Type: Long
Standaard: 600
(10 minuten); this is defined on /libs/settings/dam/cfm/jcr:content
Als u een auto sparen interval van 5 minuten wilt plaatsen moet u het bezit op uw knoop bepalen; bijvoorbeeld:
Knooppunt: /conf/global/settings/dam/cfm/jcr:content
Naam eigenschap: autoSaveInterval
Type: Long
Waarde: 300
(5 minuten komt overeen met 300 seconden)
Zie Sjablonen voor inhoudsfragmenten voor volledige informatie.
Zie voor meer informatie