我在Sitecore 7.2
我在尝试检索媒体网址时遇到问题。
我有一个模板(PageBanner
)只有一个名为BannerImage
的字段。字段类型为Image
。
另一个名为Homepage
的模板会继承此模板PageBanner
。
内容项Home
使用模板Homepage
。我可以将BannerImage
字段视为Home
内容项的一部分。此图像也已分配给该字段。
现在,遇到问题的后端位。
homeItem.Field["BannerImage"]
返回图片项。
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
我希望通过路径获取媒体网址。
知道我在这里缺少什么吗?
答案 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;
}