2011-04-18 51 views
2

如何在页面中提供Sitecore媒体库中文档的链接?Sitecore提供链接以允许用户查看/下载媒体项目

在我的模板中,我有一个允许用户为给定页面对象选择多个文档的Treelist。在我的sublayout code-behind中,迭代Treelist字段中的项目以获取其ID,然后使用Sitecore.Links.LinkManager.GetItemUrl()获取项目的URL。目前,我只是使用超链接呈现链接,但点击链接时,我收到错误,说没有找到布局。

我需要创建一个布局,它是一个ashx处理程序来处理下载媒体项目的内容流,或者是否有内置的可以做到这一点的内容?

回答

6

要生成媒体库中项目的链接,您应该使用MediaManager。例如:

string url = Sitecore.Resources.Media.MediaManager.GetMediaUrl(item) 
+1

不要忘记使用Sitecore的StringUtil确保前缀! – Younes 2011-04-19 06:34:10

+0

@Younes好的提示。 – 2011-04-19 10:29:23

+0

@Younes谢谢你的提示,我应该特别在StringUtil中查看哪些方法?在相关说明中,我刚刚开始在双语网站中使用此方法,并且遇到了更多问题。 – 2011-04-19 14:58:56

1

尝试使用Sitecore.Resource.Media.MediaProvider.GetMediaUrl()

或者,对于每个项目,转换为MediaItem。
媒体文件夹应该是:/〜/ media/
MediaPath是一个属性。
扩展名是文件后缀名等。

另请参阅使用MediaUrlOptions

+0

在MediaUrlOptions类中,我应该特别注意哪些属性? – 2011-04-20 09:05:32

1

回应mdresser并完成对Younes的评论;保证了前缀“/”使用StringUtil看起来是这样的:

var thumbnailUrl = Sitecore.StringUtil.EnsurePrefix('/', 
         Sitecore.Resources.Media.MediaManager.GetThumbnailUrl(_thumbnail)); 
0

你可以有文件的的TreeList这是在你的代码类型的“文件”的背后,你可以itterate一个循环来获取的,该网址文件项目(其具有文件类型),并且您可以获取该文件项目的“媒体网址”并将其分配给超链接。

这里是代码片段:

List<Item> documentList = your list of selected documents from sitecore 

foreach(Item item in documentList) 
{ 
    FieldField file = item.Fields["FileField Name"]; 
    if(file != null) 
    { 
     if(file.MediaItem != null) 
     { 
      hyperlink.NavigateUrl =  Sitecore.StringUtil.EnsurePrefix('/',Sitecore.Resources.Media.MediaManager.GetMediaUrl(file.MediaItem)); 
     } 
    } 
} 
相关问题