如何在 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 地理位置信息中获取用户所在的国家/地区?

Sitecore SocialConnect 1.3:以编程方式检索用户详细信息

Sitecore 获取存档项目

Sitecore:如何使用代码隐藏的子布局参数?

将大文件上传到 sitecore 媒体库

您如何设置安全性以便用户只能在 Sitecore 中查看/编辑他们的项目?