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

2024-06-17

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

如果您使用 API 中的 GetMediaUrl 方法,我可以获得以下 URL:

/~/media/Images/Archive/content/新闻和活动/News_and_Events_Level2/20070419162739/iwhiz3.jpg

这种方法的问题在于,如果有人更改媒体项名称、将其移至某处或将其删除,则上述链接将中断。

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

/~/media/14BDED00E4D64DFD8F74019AED4D74EB.ashx

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

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

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

Thanks!


The 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"));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐