如何在Sitecore中生成id为而不是路径的媒体项链接
有人知道如何在sitecore中使用ID而不是项目路径生成链接吗 如果使用API中的GetMediaUrl方法,我可以获得以下URL: /~/media/Images/Archive/content/News and Events/News_and_Events_Level2/20070419162739/iwhiz3.jpg 这种方法的问题是,如果有人更改媒体项名称、将其移到某处或将其删除,上述链接将中断 我注意到,如果我从富格文本编辑器插入媒体链接,我会得到如下链接: /~/media/14bded00e4dd64dfd8f74019aed4d74eb.ashx 第二个链接更好,因为它使用的是项目id,因此如果实际的媒体项目被重命名、删除或删除,所有相关链接也将更新。最重要的是,当Sitecore呈现页面时,它实际上会转换上面的链接并显示项目路径,以便可读 我正在使用Sitecore 6.5,目前正在进行内容迁移,因此我需要确保所有内部链接都已正确更新 我可以知道是否有一种方法可以使用sitecore API生成第二个链接吗如何在Sitecore中生成id为而不是路径的媒体项链接,sitecore,sitecore6,sitecore-media-library,Sitecore,Sitecore6,Sitecore Media Library,有人知道如何在sitecore中使用ID而不是项目路径生成链接吗 如果使用API中的GetMediaUrl方法,我可以获得以下URL: /~/media/Images/Archive/content/News and Events/News_and_Events_Level2/20070419162739/iwhiz3.jpg 这种方法的问题是,如果有人更改媒体项名称、将其移到某处或将其删除,上述链接将中断 我注意到,如果我从富格文本编辑器插入媒体链接,我会得到如下链接: /~/media/14
谢谢 这些被称为
动态链接
,您通常可以使用链接管理器
生成它们,例如:
Sitecore.Links.LinkManager.getdynamiccurl(项目)
。。但我不确定使用媒体链接的方法(可能有一个,但我似乎找不到,而且它不在MediaManager
上),但基本语法是:
“/~/media/”+item.ID.tosortid()+“.ashx”
扩展方法似乎可以满足您的需要
public static class ItemExtensions
{
public static string GetMediaItemUrl(this Item item)
{
var mediaUrlOptions = new MediaUrlOptions() { UseItemPath = false, AbsolutePath = true };
return Sitecore.Resources.Media.MediaManager.GetMediaUrl(item, mediaUrlOptions);
}
}
[TestFixture]
public class when_using_items_extensions
{
[Test]
public void a_url_based_on_media_item_id_can_be_generated()
{
// Arrange
Database db = global::Sitecore.Configuration.Factory.GetDatabase("master");
Item item = db.GetItem("/sitecore/media library/Images/MyImage");
// Act
var mediaUrl = item.GetMediaItemUrl();
// Assert
Assert.That(mediaUrl, Is.EqualTo("/~/media/17A1341ABEEC46788F2159843DCEAB03.ashx"));
}
}
如果您始终希望使用ID而不是路径,则可以在webconfig中将此设置更改为false(如下所示): 然后,您可以使用默认实现(无其他参数): 这就是我使用的:
var imgField = ((Sitecore.Data.Fields.ImageField)currentItem.Fields["Icon"]);
MediaUrlOptions opt = new MediaUrlOptions();
opt.AlwaysIncludeServerUrl = true;
// Absolute Path works as well. So either use AbsolutePath or AlwaysIncludeServerUrl
opt.AbsolutePath = true;
string mediaUrl = MediaManager.GetMediaUrl(imgField.MediaItem, opt);
这是可行的,但我必须将absolutepath设置为false,否则链接将显示为and Events/News_and_Events_Level2/20070419162739/iwhiz3.jpg以下是我的url选项:var urlpoptions=new MediaUrlOptions{absolutepath=false,UseItemPath=false,AlwaysIncludeExtension=true};
MEDIA - USE ITEM PATHS FOR URLS
This setting controls if item paths are used for constructing media URLs.
If false, short ids will be used.
Default value: true
Sitecore.Resources.Media.MediaManager.GetMediaUrl(item);
var imgField = ((Sitecore.Data.Fields.ImageField)currentItem.Fields["Icon"]);
MediaUrlOptions opt = new MediaUrlOptions();
opt.AlwaysIncludeServerUrl = true;
// Absolute Path works as well. So either use AbsolutePath or AlwaysIncludeServerUrl
opt.AbsolutePath = true;
string mediaUrl = MediaManager.GetMediaUrl(imgField.MediaItem, opt);