Sitecore媒体项目网址

时间:2016-02-08 21:05:05

标签: sitecore sitecore7.2

我在Sitecore 7.2

我在尝试检索媒体网址时遇到问题。

我有一个模板(PageBanner)只有一个名为BannerImage的字段。字段类型为Image

另一个名为Homepage的模板会继承此模板PageBanner

内容项Home使用模板Homepage。我可以将BannerImage字段视为Home内容项的一部分。此图像也已分配给该字段。

现在,遇到问题的后端位。

homeItem.Field["BannerImage"]返回图片项。

enter image description here

homeItem["BannerImage"]返回空字符串。

如果我尝试将其投射到 ImageField - (ImageField)homeItem.Field["BannerImage"],则生成的ImageField项目没有MediaItem或任何其他字段集。

我能做到:

var imageFieldItem = Sitecore.Context.Database.GetItem(homeItem.Fields["BannerImage"].ID);
var mediaUrl = MediaManager.GetMediaUrl(imageFieldItem);

但是这给了我一个动态媒体网址 - ~/media/a2c15f35836746f398e772c81d040607.ashx

我希望通过路径获取媒体网址。

知道我在这里缺少什么吗?

2 个答案:

答案 0 :(得分:2)

您正在使用MediaManager拨打正确的电话获取网址,但您需要将内部MediaItem传递给GetMediaUrl()方法:

string imageURL = string.Empty;
Sitecore.Data.Fields.ImageField imageField = homeItem.Field["BannerImage"];
if (imageField != null && imageField.MediaItem != null)
{
    Sitecore.Data.Items.MediaItem image = new Sitecore.Data.Items.MediaItem(imageField.MediaItem);
    imageURL = Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(image));
}

对于生成的动态URL,如果它处于编辑模式,那么这是正常的,在正常模式下检查媒体URL是否完全呈现。

答案 1 :(得分:-1)

在某个实用程序类中尝试使用此代码。

var imageUrl = GetImageUrl(homeItem,“BannerImage”false);

    public static string GetImageUrl(Item item, string fieldname, bool includeServerUrl)
    {
        // do the checks
        if (item == null) { return ""; }
        if (fieldname.Length == 0) { return ""; }

        // create media options
        Sitecore.Resources.Media.MediaUrlOptions mediaUrlOptions = new Sitecore.Resources.Media.MediaUrlOptions { AlwaysIncludeServerUrl = true };
        mediaUrlOptions.AbsolutePath = true;

        // do we want to include the FQDN?
        if (includeServerUrl)
            mediaUrlOptions.AlwaysIncludeServerUrl = true;

        // convert to image field
        Sitecore.Data.Fields.ImageField imagefield = item.Fields[fieldname];

        if (imagefield == null) { return ""; }

        // get the item so we can process it
        Item mediaitem = Sitecore.Context.Database.GetItem(imagefield.MediaID);
        if (mediaitem == null) { return ""; }

        // pass in the item with the options to get the URL
        string mediaurl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(mediaitem, mediaUrlOptions);
        if (mediaurl == null) { return ""; }

        return mediaurl;
    }