Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate media item link with id instead of path in Sitecore

Anyone knows how to generate links in sitecore with ID instead of item path?

If you use GetMediaUrl method from the API, I can get this URL:

/~/media/Images/Archive/content/News and Events/News_and_Events_Level2/20070419162739/iwhiz3.jpg

The problem with this approach is that if someone changes the media item name, removes it somewhere or deletes it, the above link will break.

I notice if I insert a media link from rich text editor, I get the link as below:

/~/media/14BDED00E4D64DFD8F74019AED4D74EB.ashx

The second link is better because it's using the item id, so if the actual media item is renamed, removed, or deleted, all related links will be updated too. On top of that, when Sitecore renders the page, it will actually convert the above link and display the item path so it's readable.

I'm using Sitecore 6.5 and currently doing content migration so I need to make sure all internal links are updated properly.

May I know if there is a method to generate the second link by using sitecore API?

Thanks!

like image 297
ronanray Avatar asked Oct 11 '12 11:10

ronanray


1 Answers

The GetMediaItemUrl extension method seems to give you what you want.

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"));
    }
}
like image 200
Kevin Obee Avatar answered Sep 30 '22 11:09

Kevin Obee