Site icon Blog ARC Optimizer

Activation de la fonctionnalité Dynamic Media Composants personnalisés AEM / Blogs / Perficient /Blogs Perficient

Activation de la fonctionnalité Dynamic Media Composants personnalisés AEM / Blogs / Perficient /Blogs Perficient


Médias dynamiquesest l’un des outils polyvalents fournis par Adobe. Auparavant, il s’appelait Scene7. Il dispose de solides capacités d’édition et d’outils de création d’actifs. Il est basé sur un réseau de livraison de cache, qui charge le contenu pour améliorer le temps de chargement des pages et restitue les bons rendus d’image correctement redimensionnés et optimisés. Dynamic Media permet aux appareils demandeurs de demander exactement le type de rendu, la version et la taille exacte de l’image dont cet appareil a besoin au moment de la demande.

Vous êtes-vous interrogé sur les avantages de l’intégration de la fonctionnalité Dynamic Media dans les composants personnalisés ? Dans ce blog, je montrerai comment intégrer Dynamic Media avec des composants personnalisés et les avantages que cela procure.

Lorsque nous intégrons Dynamic Media à AEM, cela active diverses fonctionnalités Dynamic Media telles que des profils image/vidéo, des métadonnées DM, des flux de travail DM et un ensemble de composants Dynamic Media prêts à l’emploi. En outre, certains composants principaux comme Image fournissent des fonctionnalités Dynamic Media.

Si vous n’avez pas intégré Dynamic Media à AEM, veuillez passer par la documentation fournie par Adobe sur la façon de configurer Dynamic Media pour AEM.

Chargement de la bibliothèque multimédia dynamique

Tout d’abord, nous devons charger les clientlibs Dynamic Media sur chaque page pour restituer les ressources Dynamic Media via les composants AEM.

Collez le code suivant dans le composant de page de section d’en-tête, c’est-à-direcustomheaderlibs.html

<!--/* Dynamic Media Integration */--> 

<sly data-sly-use.clientLib="${'/libs/granite/sightly/templates/clientlib.html'}" 

data-sly-call="${clientLib.all @ categories="cq.dam.components.scene7.dynamicmedia,cq.dam.components.scene7.common.i18n"}"></sly>

Implémentation d’un modèle d’élingue personnalisé

Créez ensuite un utilitaire commun de modèle Sling personnalisé pour lire les propriétés des métadonnées des ressources Dynamic Media, qui est nécessaire pour charger toutes les ressources AEM via la fonctionnalité Dynamic Media.

Mise en œuvre du modèle Sling

public interface DynamicMedia extends BaseModel { 

String getCurrentPagePath(); 

String getPageLocale(); 

String getAssetName(); 

String getAssetPath(); 

String getDynamicMediaViewerPath(); 

String getDynamicMediaImageServerPath(); 

boolean isWcmModeDisabled(); 

@Slf4j 

@Model( 

adaptables = SlingHttpServletRequest.class, 

adapters = DynamicMedia.class, 

defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL 

) 

public class DynamicMediaImpl implements DynamicMedia { 

private static final String DM_IMAGE_SERVER_PATH = "is/image/";  

private static final String DM_VIEWERS_SERVER_PATH = "s7viewers/"; 

@SlingObject 

private SlingHttpServletRequest request; 

@ScriptVariable 

private Page currentPage; 

@RequestAttribute 

private String imageReference; 

@Getter 

private String assetName; 

@Getter 

private String assetPath; 

@Getter 

private String dynamicMediaViewerPath; 

@Getter 

private String dynamicMediaImageServerPath; 

@PostConstruct 

protected void init() { 

if (StringUtils.isNotEmpty(imageReference)) { 

final Resource assetResource = request.getResourceResolver() 

.getResource(imageReference); 

if (assetResource != null) { 

final Asset asset = assetResource.adaptTo(Asset.class); 

if (asset != null) { 

this.id = getId() + "-" + asset.getID(); 

assetName = asset.getName(); 

assetPath = asset.getMetadataValue(Scene7Constants.PN_S7_FILE); 

final String dynamicMediaServer = asset.getMetadataValue( 

Scene7Constants.PN_S7_DOMAIN); 

dynamicMediaImageServerPath = dynamicMediaServer + DM_IMAGE_SERVER_PATH; 

dynamicMediaViewerPath = dynamicMediaServer + DM_VIEWERS_SERVER_PATH; 

} 

} 

} 

} 

@Override 

public String getCurrentPagePath() { 

return currentPage.getPath(); 

} 

@Override 

public String getPageLocale() { 

return LocaleUtils.generateLocaleFromPath(getCurrentPagePath()); 

} 

@Override 

public boolean isWcmModeDisabled() { 

return (WCMMode.fromRequest(request) == WCMMode.DISABLED); 

} 

}

Une fois que nous avons terminé la partie implémentation du modèle Sling, créez un modèle HTL dans le répertoire/apps/Répertoire>/composants/atomes/médias dynamiques/image.htmlpour assurer la réutilisabilité dans le composant chaque fois que nous voulons charger une image à l’aide d’un média dynamique pour un objectif spécifique composant. Collez le code suivant dans leimage.htmldéposer.

<sly data-sly-template.dynamicMediaImageTemplate="${ @ imageReference, aspectRatio, altText, suffixId}"> 

<div data-sly-use.dynamicMediaImage="${'com.perficientblogs.core.models.commons.DynamicMediaModel' @ imageReference = imageReference}" 

id="${suffixId || dynamicMediaImage.id}" 

data-current-page="${dynamicMediaImage.currentPagePath}" 

data-page-locale="${dynamicMediaImage.pageLocale}" 

data-asset-path="${dynamicMediaImage.assetPath}" 

data-asset-name="${dynamicMediaImage.assetName}" 

data-asset-type="image" 

data-viewer-path="${dynamicMediaImage.dynamicMediaViewerPath}" 

data-imageserver="${dynamicMediaImage.dynamicMediaImageServerPath}" 

data-wcmdisabled="${dynamicMediaImage.wcmModeDisabled}" 

data-dms7="" 

data-mode="smartcrop" //Note: We can set the image preset mode here 

data-enablehd="always" 

data-aspectratio="${aspectRatio @context="scriptString"}" 

data-title="${altText}" 

data-alt="${altText}" 

class="s7dm-dynamic-media"> 

</div> 

</sly>

Référez-vous maintenant à ce fichier de modèle HTL n’importe où dans le composant HTML où nous souhaitons charger toute image créée via un CDN multimédia dynamique.

<sly data-sly-use.image=" /apps/<Project Driectory>/components/atoms/dynamicmedia/image.html" 

data-sly-call="${image.dynamicMediaImageTemplate @ imageReference= modeloject.fileReference, aspectRatio= false, altText="Hello world Component"}"></sly>

Assurez-vous de transmettre une valeur pourimageRéférencepropriété qui est obligatoire. Nous pouvons également transmettre les valeurs avec d’autres objets nommésratio d’aspect,textealtselon les besoins ou étendre les fonctionnalités selon les besoins.

Voir l’image ci-dessus pour le résultat final. Regardez l’URL de l’image rendue par le composant personnalisé. Il est fourni à partir du CDN fourni par Dynamic Media. C’est l’avantage que vous obtenez avec cela. De cette façon, les images seront diffusées beaucoup plus rapidement à l’utilisateur en fonction de la région dans laquelle il se trouve.

Si vous avez des questions ou des commentaires, déposez-les dans le chat ci-dessous !






Source link
Quitter la version mobile