How can I configure Sitecore so that it generates absolute links to media items?

不打扰是莪最后的温柔 提交于 2019-11-27 06:12:57

问题


<sc:Image> and <sc:FieldRenderer>, when rendering a MediaItem, generate html code that looks like the following:

<img src="~/media/twitter.gif" alt="Twitter" width="100" height="22" />

Notice the relative path used in src attribute: this means that when such an image is reused on multiple pages, the browser has to fetch it multiple times (e.g. on page http://example.com/ and http://example.com/about-us/). When I generate the img tag in code, I can use the following snippet to force an absolute URL:

string url = Sitecore.StringUtil.EnsurePrefix('/',
    Sitecore.Resources.Media.MediaManager.GetMediaUrl(media));

How can I configure Sitecore to force the leading slash in media urls?

Using Reflector I can see that MediaOptions.AbsolutePath controls the behaviour that I want to achieve, but I don't know how can I set it for Sitecore built-in controls. Setting Media.MediaLinkPrefix or mediaPrefixes in web.config doesn't seem to change anything.


回答1:


I worked on a project where we stored media assets on Akamai's CDN, so we had to change how the media URLs resolved.

We adapted the built-in LinkProvider class by changing ExpandDynamicLinks(). We also adapted Sitecore.Resources.Media.MediaProvider and updated the GetMediaUrl() method.

These were to handle links to images generated by field renderers and links created within a Rich Text editor.




回答2:


There's a much easier solution to this. I may be a little off with my syntax - please feel free to correct me and I'll make edits.

MediaManager.GetItemUrl(item, new MediaUrlOptions { AbsolutePath = true });



回答3:


Create a Link to Sitecore Media Item

You will not be able to fetch the Media Item using the above LinkManager.GetItemUrl() Method. Sitecore has a separate API to fetch the Media URLs.

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);
}

Like LinkManager had the URLOptions MediaManager comes with a MediaUrlOptions where you can control the absolute and relative URLs.



来源:https://stackoverflow.com/questions/5977809/how-can-i-configure-sitecore-so-that-it-generates-absolute-links-to-media-items

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!