2011-05-12 72 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。

相關問題