我目前正在使用sitecore生成图像站点地图.因此,我需要在网站的特定网址中使用的所有图像.
在这里,我需要获取使用媒体项目的所有项目的详细信息.否则,我需要查找sitecore的item(url)中使用的所有媒体项目(图像).
我试图从一个项目中获取图像字段,它工作正常,但我需要的是获取该项目中使用的所有图像,这些图像通过演示文稿详细信息添加.
Item currentitem = master.GetItem("/sitecore/content/International/Cars/New models/All new XC90");
public static string GetImageURL(Item currentItem)
{
string imageURL = string.Empty;
Sitecore.Data.Fields.ImageField imageField = currentItem.Fields["Image"];
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));
}
return imageURL;
}
解决方法:
由于页面由多个组件组成,因此您需要遍历这些组件,检索所有数据源项并检查字段值.不要忘记,图像也可以放置在RTF字段中.
为了确保捕获所有这些,最好将WebClient调用回该站点,本质上是抓取呈现的HTML,然后使用HTMLAgilityPack/FizzlerEx/CsQuery返回所有图像.然后,可以根据需要仅过滤来自媒体库或特定位置的内容.
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;
//get the page
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load("http://example.com/requested-page");
HtmlNode page = document.DocumentNode;
//loop through all images on the page
foreach(HtmlNode item in page.QuerySelectorAll("img"))
{
var src = item.Attributes["src"].Value;
// do some stuff
}
如果只想从媒体库中引用图像,则可以限制查询:
foreach(HtmlNode item in page.QuerySelectorAll("img[src^='/-/media/']"))
{
//do stuff
...
}