2012-08-06 88 views
0

在Sitecore 6.5解決方案中,我擁有以下內容;Sitecore內部鏈接到媒體文件?

<sc:Text runat="server" Field="bodyText"/> 

Sitecore.Context.Item["bodyText"] 

我用了後很多地方在解決方案 - 第一沒有這麼多。 我現在已經發現,在使用後者時,即使在web.config中將Media.UseItemPaths設置爲true,但到醫學圖書館的所有鏈接的格式都是~/media/31F0E8084F9443789F25836A2B285D3E.ashx

但是,當我使用第一個提到的方法<sc:Text />醫學圖書館項目的鏈接是正確的格式(沒有guid,但媒體庫的文件夾結構)。

怎麼回事?

+0

你能檢查什麼是在頁面的源代碼 - 是否有開頭或%7E,而不是一個蒂爾達蒂爾達人物?例如。 〜/ media/31F0E8084F9443789F25836A2B285D3E.ashx或%7e/media/31F0E8084F9443789F25836A2B285D3E.ashx? – 2012-08-06 09:30:45

回答

3

作爲halbherz提及的後

Sitecore.Context.Item["bodyText"] 

是字段的文本值。它不通過sitecore RenderField管道,因此沒有任何鏈接被擴展。

如果你想從代碼呈現的字段後面你可以使用FieldRenderer類,如:

Sitecore.Web.UI.WebContols.FieldRenderer.Render("bodyText", Sitecore.Context.Item) 
+1

這就是我要寫的。在Sitecore 6.X中,您需要使用或FieldRenderer來正確「呈現」鏈接。 – Holger 2012-08-06 10:32:15

0

第一個是通過某些管道和紅色保存項目引用作爲友好URL的控件。

第二個是直接值調用,它返回未編輯的值。 要獲得一個friednly網址,您應該使用該控件。

爲什麼你需要直接調用該值?

1

我想補充進一步澄清(什麼@halbherz和@marto說的是完全正確的),只是讓你可以更好地理解〜爲什麼〜他們是這樣的。使用項目的「短GUID」所以

在富文本字段,媒體和其他物品Sitecore的鏈接以這種格式存儲(〜/媒體/ 31F0E8084F9443789F25836A2B285D3E.ashx),如果有人重命名或然後移動媒體/內容項目該鏈接仍然有效(而不是嵌入該字段中項目的全名&路徑)。

當您使用(即繼承FieldRenderer如SC或控制:文/ SC:圖像等)的FieldRenderer的RenderField管道被稱爲和鏈接由LinkManager處理(見你的web.config <LinkManager>部分了解更多信息在配置)。 LinkManager存在,以便所有鏈接以一致的方式處理。直接調用字段值將繞過此管道,並獲得該字段的原始文本。

可以使用創建類似這樣自己的鏈接:LinkManager.GetDynamicUrl(item);

相關問題