如何使用id而不是Sitecore中的路径生成媒体项链接

ron*_*ray 5 sitecore sitecore6 sitecore-media-library

任何人都知道如何使用ID而不是项目路径在sitecore中生成链接?

如果您使用API​​中的GetMediaUrl方法,我可以获取此URL:

/〜/媒体/图片/存档/内容/新闻/ News_and_Events_Level2/20070419162739/iwhiz3.jpg

这种方法的问题是,如果某人更改了媒体项目名称,将其删除或删除它,上述链接将中断.

我注意到如果我从富文本编辑器插入媒体链接,我得到如下链接:

/~/media/14BDED00E4D64DFD8F74019AED4D74EB.ashx

第二个链接更好,因为它使用了项目ID,因此如果重命名,删除或删除实际媒体项目,所有相关链接也将更新.最重要的是,当Sitecore呈现页面时,它实际上将转换上面的链接并显示项目路径,以便它可读.

我正在使用Sitecore 6.5并且目前正在进行内容迁移,因此我需要确保所有内部链接都已正确更新.

我是否知道是否有使用sitecore API生成第二个链接的方法?

谢谢!

Kev*_*bee 12

GetMediaItemUrl扩展方法似乎给你想要的东西.

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)