【问题标题】:Media file size report in UmbracoUmbraco 中的媒体文件大小报告
【发布时间】:2015-04-15 14:00:10
【问题描述】:

我在 CMS 的“媒体”部分中有很多图片。我想知道获取图像列表及其文件大小的最佳方法是什么?

在 db 中操作 xml 字符串会更好还是在 CMS 前端添加一列?

【问题讨论】:

  • 添加评论以触发通知,以便您查看和使用更新的解决方案;)

标签: umbraco umbraco7


【解决方案1】:

更新答案:

更快更好的递归解决方案:

<ul id="imageList">
@foreach (var item in Umbraco.TypedMediaAtRoot()) {
    @ShowMediaItems(item)
}
</ul>

@helper ShowMediaItems(IPublishedContent media) {
if (media.Descendants().Any(p => p.DocumentTypeAlias != "Folder") && media.DocumentTypeAlias == "Folder") {
    <ul>
        @foreach (var child in media.Children) {
            @ShowMediaItems(child)
        }
    </ul>
} else if (media.DocumentTypeAlias == "Image") {
    <li>Image url: @media.Url - Size: @(media.GetPropertyValue<int>("umbracoBytes"))</li>    
}
}

它会走得尽可能深,而且速度要快得多。我已经为每个级别添加了一个新的 ul 列表,但是你可以去掉它。

原始答案:

这很有效,并且在处理大量图像时会很慢,但是如果您需要为自己获取一个列表(就像一次性的事情一样),那么它应该可以完成这项工作:

<ul>
@foreach (var item in Umbraco.TypedMediaAtRoot())
{
    //Level 1
    if (item.DocumentTypeAlias == "Folder")
    {
        //Level 2
        foreach (var item2 in Umbraco.TypedMedia(item.Id).Children)
        {
            if (item2.DocumentTypeAlias == "Folder")
            {
                //Level 3
                foreach (var item3 in Umbraco.TypedMedia(item2.Id).Children)
                {
                    if (item3.DocumentTypeAlias == "Folder")
                    {
                        //Level 3
                        //etc..
                    }
                    else if (item3.DocumentTypeAlias == "Image")
                    {
                        <li>Image url: @item3.Url - Size: @(item3.GetPropertyValue<int>("umbracoBytes"))</li>
                    }

                }
            }
            else if (item2.DocumentTypeAlias == "Image")
            {
                <li>Image url: @item2.Url - Size: @(item2.GetPropertyValue<int>("umbracoBytes"))</li>
            }

        }
    }
    else if (item.DocumentTypeAlias == "Image")
    {
        <li>Image url: @item.Url - Size: @(item.GetPropertyValue<int>("umbracoBytes"))</li>
    }
}
</ul>

您可以根据自己的媒体部分中的文件夹数量来选择任意深度。

查看代码中的 cmets。 Level 1 是根媒体文件夹,Level 2 是根目录下的文件夹,依此类推。

我刚刚在本地 Umbraco 实例上对其进行了测试,它可以工作。

关于大小,它们以字节为单位,因此您可以使用 GetPropertyValue("umbracoBytes") 进行自己的计算

【讨论】:

  • 谢谢!我确实认为 db xml 字符串超出了顶部。不错的解决方案!
  • @Asher 不客气。看看编辑。我放了一个递归解决方案。
  • 啊,如果可以将此代码实现到一个名为 size 的附加列中,用于列表视图 - Umbraco 中的媒体,那就太好了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2012-12-19
相关资源
最近更新 更多