Sitecore内部链接到媒体文件?

时间:2012-08-06 08:43:03

标签: sitecore sitecore6

在Sitecore 6.5解决方案中,我有以下内容;

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

Sitecore.Context.Item["bodyText"]

我在解决方案中使用后者的许多地方 - 第一个不是那么多。 我现在发现,使用后者时,所有指向medialibrary的链接都采用~/media/31F0E8084F9443789F25836A2B285D3E.ashx格式,即使{。1}}在web.config中设置为Media.UseItemPaths

但是,当我使用第一个提到的方法true时,medialibrary项目的链接格式正确(没有guid,但媒体库的文件夹结构)。

怎么回事?

3 个答案:

答案 0 :(得分:3)

正如halbherz提到后者

Sitecore.Context.Item["bodyText"]

是该字段的字面值。它不会通过sitecore RenderField管道,因此不会扩展任何链接。

如果要从后面的代码中渲染字段,可以使用FieldRenderer类,如:

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

答案 1 :(得分:1)

只是为了进一步澄清(@halbherz和@marto所说的完全正确),这样你就可以更好地理解〜为什么〜他们就是这样。

在RichText字段中,使用项目的“短GUID”以此格式(〜/ media / 31F0E8084F9443789F25836A2B285D3E.ashx)存储媒体和其他sitecore项目的链接,这样,如果有人重命名或移动您的媒体/内容项,则链接仍然有效(而不是在字段中嵌入项目的全名和路径)。

当您使用FieldRenderer(或从FieldRenderer继承的控件,如sc:text / sc:image等)时,RenderField管道被调用,链接由LinkManager处理(请参阅web.config <LinkManager>部分有关配置的更多信息)。存在LinkManager,以便以一致的方式处理所有链接。直接调用字段值会绕过此管道,您将获得该字段的原始文本。

您可以使用以下内容创建自己的链接:LinkManager.GetDynamicUrl(item);

答案 2 :(得分:0)

第一个是一个控件,它通过某些管道和redners保存的项目引用作为友好的URL。

第二个是直接值调用,它返回未编辑的值。 要获得一个非常好的网址,你应该使用控件。

为什么需要直接调用该值?