如何在 sitecore 中获取媒体项目详细信息?
Posted
技术标签:
【中文标题】如何在 sitecore 中获取媒体项目详细信息?【英文标题】:How to get media item details in sitecore? 【发布时间】:2016-04-11 12:46:56 【问题描述】:我目前正在 sitecore 中生成图像站点地图。所以我需要网站的特定 url 中使用的所有图像。
在这里,我需要获取使用媒体项目的所有项目的详细信息.. 否则我需要找到在 sitecore 中的项目(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;
【问题讨论】:
【参考方案1】:由于页面由多个组件组成,您需要遍历这些组件,检索所有数据源项并检查字段值。别忘了图片也可以放在富文本字段中。
为了确保捕获所有这些,您最好对站点进行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
...
【讨论】:
谢谢..我会试试这个 @bala3569 请记住,根据您的设置,您可以有不同的媒体前缀(例如~/media
),使用网络客户端将不允许您轻松获取个性化内容,如果您有任何链接包括完整的主机名,您需要更新过滤器。
@jammykam 如何单独获取视频网址?
@bala3569 如果视频位于媒体库的特定区域,那么您可以指定它,例如page.QuerySelectorAll("img[src^='/-/media/videos']")
。或者使用“endswith”选择器img[src$='.mp4']
另一种方法是check all Items that refer to a particular media item。如果有一组特定的媒体【参考方案2】:
正如 jammykam 所指出的,一个页面可能由多个组件组成。但是,对 html 进行实时请求可能并不总是最佳的。
另一种解决方案是使用 Sitecore ContentSearch。您可以创建一个存储的计算域,其中包含页面项目上所有图像的列表。这样在运行时提取会快得多,而且您可以花费更多的 CPU 周期来在索引时获取准确的图像列表。
计算的索引字段可以是 guid 列表(媒体项目 ID)或图像 url 或任何适合您需要的自定义格式。
在索引期间,您可以使用 LinkDatabase 查找引用的项目并过滤掉您需要的媒体项目。因此,您将获得从任何字段引用的图像,包括富文本字段中的嵌入图像。
如前所述,您可以对项目本身和页面布局使用的引用项目执行这些操作。可以遍历从item.Visualization.GetRenderings得到的item引用列表
【讨论】:
【参考方案3】:遍历 sitecore 中的所有页面是一项非常繁重的任务,还会导致获取不需要的图像,例如徽标、其他标题图像。您应该考虑在页面模板上添加“站点地图图片”树列表字段以包含页面的所有相关图片。
【讨论】:
以上是关于如何在 sitecore 中获取媒体项目详细信息?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Sitecore 地理位置信息中获取用户所在的国家/地区?