2011-05-12 74 views
8

<sc:Image><sc:FieldRenderer>,渲染MediaItem时,生成HTML代码,看起来像以下:如何配置Sitecore以便生成与媒体项目的绝对链接?

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

通知在src属性中使用的相对路径:这意味着,当这样的图像被在多个页面上重复使用,浏览器必须多次读取它(例如,第http://example.com/http://example.com/about-us/)。当我在代码生成img标签,我可以使用下面的代码片段,以迫使绝对URL:

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

如何配置Sitecore的强制媒体URL中的斜线?

使用反射器我可以看到,MediaOptions.AbsolutePath控制我想实现的行为,但我不知道如何为Sitecore内置控件设置它。设置Media.MediaLinkPrefixmediaPrefixesweb.config似乎没有改变任何东西。

回答

8

我曾在一个项目中将媒体资产存储在Akamai的CDN上,所以我们必须改变媒体URL的解析方式。

我们通过更改ExpandDynamicLinks()改编了内置的LinkProvider类。我们还改编了Sitecore.Resources.Media.MediaProvider并更新了GetMediaUrl()方法。

这些是处理由字段渲染器和富文本编辑器中创建的链接生成的图像的链接。

+0

这就是我们目前解决这个问题的方法,但我希望有一个配置解决方案 - 反射器显示Sitecore能够做到这一点,我只是不知道如何启用它。但如果没有配置答案,我会接受你的。 – skolima 2011-05-12 19:24:58

+0

我同意 - 我很乐意看到这个配置解决方案,但我不认为有一个。 *手指交叉* – 2011-05-12 21:53:24

+0

我还没有找到配置解决方案。我工作的最后两个网站使用CDN服务媒体项目,我们必须做一些非常相似的事情。 – marto 2011-05-13 20:04:32

2

有一个更简单的解决方案。我的语法可能会有点偏差 - 请随时纠正我,我会进行编辑。

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

正确的语法是'MediaManager.GetMediaUrl(item,new MediaUrlOptions {AbsolutePath = true});' – dthrasher 2015-11-06 19:35:44

0

Create a Link to Sitecore Media Item

您将无法获取使用上述LinkManager.GetItemUrl()方法的媒体项目。 Sitecore有一个单独的API来获取媒体网址。

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

像LinkManager有URLOptions媒体管理器带有一个MediaUrlOptions在那里你可以控制的绝对和相对URL。

相关问题