Sitecore媒体项url
我在Sitecore7.2 我在尝试检索媒体URL时遇到问题 我有一个模板(Sitecore媒体项url,sitecore,sitecore7.2,Sitecore,Sitecore7.2,我在Sitecore7.2 我在尝试检索媒体URL时遇到问题 我有一个模板(PageBanner),只有一个名为BannerImage的字段。字段类型为Image 另一个名为Homepage的模板继承了此模板PageBanner 内容项主页使用模板主页。我可以看到BannerImage字段作为Home内容项的一部分。图像也已分配给此字段 现在,是遇到问题的后端位 homeItem.Field[“BannerImage”]返回图像项 homeItem[“BannerImage”]返回空字符串 如
PageBanner
),只有一个名为BannerImage
的字段。字段类型为Image
另一个名为Homepage
的模板继承了此模板PageBanner
内容项主页
使用模板主页
。我可以看到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);
但这给了我一个动态媒体url,格式为-~/media/a2c15f35836746f398e772c81d040607.ashx
我希望通过路径获取媒体URL
知道我在这里遗漏了什么吗?您正在使用
MediaManager
进行正确的调用以获取URL,但是您需要将内部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是否完全呈现。在某些实用程序类中尝试此代码 var imageUrl=GetImageUrl(homeItem,“BannerImage”false)
嗨@jammykam。就像问题中提到的。当我将
homeItem.field[“BannerImage”]
强制转换为ImageField时,MediaItem字段为空。没有字段的homeItem[“BannerImage”]
的值是多少?它返回图像项目。我将在问题中添加一些调试信息@MarekMusielak@NomadTravaler它将永远不会返回图像项。它只能返回字符串。字符串的值是多少?这是xml吗?这是项guid为的字符串吗?还有别的吗?你写的是.Fields
My bad@MarekMusielak。不要把你的评论看错了。它返回了一个空字符串。这意味着有一个字段,但它没有值。转到Sitecore桌面(/Sitecore/shell
url)并找到主项目。看看这个字段的值是多少。
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;
}