Comment puis-je configurer Sitecore pour qu'il génère des liens absolus vers des éléments multimédias ?
-
12-11-2019 - |
Question
<sc:Image>
et <sc:FieldRenderer>
, lors du rendu d'un MediaItem, générez un code HTML qui ressemble à ce qui suit :
<img src="~/media/twitter.gif" alt="Twitter" width="100" height="22" />
Notez le chemin relatif utilisé dans src
attribut:cela signifie que lorsqu'une telle image est réutilisée sur plusieurs pages, le navigateur doit la récupérer plusieurs fois (par ex.sur la page http://exemple.com/ et http://example.com/about-us/).Quand je génère le img
balise dans le code, je peux utiliser l'extrait suivant pour forcer une URL absolue :
string url = Sitecore.StringUtil.EnsurePrefix('/',
Sitecore.Resources.Media.MediaManager.GetMediaUrl(media));
Comment puis-je configurer Sitecore pour forcer la barre oblique dans les URL des médias ?
En utilisant Reflector, je peux voir que MediaOptions.AbsolutePath
contrôle le comportement que je souhaite obtenir, mais je ne sais pas comment puis-je le définir pour les contrôles intégrés de Sitecore.Paramètre Media.MediaLinkPrefix
ou mediaPrefixes
dans web.config
cela ne semble rien changer.
La solution
J'ai travaillé sur un projet dans lequel nous stockions des ressources multimédias sur le CDN d'Akamai. Nous avons donc dû modifier la façon dont les URL multimédias étaient résolues.
Nous avons adapté le système intégré LinkProvider
classe en changeant ExpandDynamicLinks()
.Nous avons également adapté Sitecore.Resources.Media.MediaProvider
et mis à jour le GetMediaUrl()
méthode.
Ceux-ci devaient gérer les liens vers les images générées par les moteurs de rendu de champ et les liens créés dans un éditeur de texte enrichi.
Autres conseils
Il existe une solution beaucoup plus simple à cela.Je me trompe peut-être un peu de syntaxe - n'hésitez pas à me corriger et j'apporterai des modifications.
MediaManager.GetItemUrl(item, new MediaUrlOptions { AbsolutePath = true });
Créer un lien vers un élément multimédia Sitecore
Vous ne pourrez pas récupérer l'élément multimédia à l'aide de la méthode LinkManager.GetItemUrl() ci-dessus.Sitecore dispose d'une API distincte pour récupérer les URL des médias.
public string ResolveSitecoreMediaURL(Sitecore.Data.Items.Item item)
{
MediaUrlOptions mediaOptions= new MediaUrlOptions();
mediaOptions.AlwaysIncludeServerUrl = true;
mediaOptions.AbsolutePath =true;
return Sitecore.Resources.Media.MediaManager.GetMediaUrl(item,mediaOptions);
}
Comme LinkManager avait les URLOptions, MediaManager est livré avec MediaUrlOptions où vous pouvez contrôler les URL absolues et relatives.