Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Umbraco中的媒体文件大小报告_Umbraco_Umbraco7 - Fatal编程技术网

Umbraco中的媒体文件大小报告

Umbraco中的媒体文件大小报告,umbraco,umbraco7,Umbraco,Umbraco7,我在CMS的媒体部分有很多图片。我想知道获取图像列表及其文件大小的最佳方法是什么 在数据库中操作xml字符串会更好还是在CMS前端添加一列更好?更新答案: 更快更好的递归解决方案: <ul id="imageList"> @foreach (var item in Umbraco.TypedMediaAtRoot()) { @ShowMediaItems(item) } </ul> @helper ShowMediaItems(IPublishedContent

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

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

更新答案:

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

<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>    
}
}
    @foreach(Umbraco.typedMediaarot()中的变量项){ @ShowMediaItems(项目) }
@助手ShowMediaItems(IPPublishedContent媒体){ if(media.subjects().Any(p=>p.DocumentTypeAlias!=“文件夹”)&&media.DocumentTypeAlias==“文件夹”){
    @foreach(media.Children中的变量child){ @ShowMediaItems(子项) }
}else if(media.DocumentTypeAlias==“Image”){
  • 图像url:@media.url-大小:@(media.GetPropertyValue(“umbracopytes”))
  • } }
    它会尽可能地深入,速度也会快得多。我已经为每一个级别设置了一个新的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>
    
      @foreach(Umbraco.typedMediaarot()中的变量项) { //一级 如果(item.DocumentTypeAlias==“文件夹”) { //二级 foreach(Umbraco.TypedMedia(item.Id).Children中的变量item2) { 如果(item2.DocumentTypeAlias==“文件夹”) { //三级 foreach(Umbraco.TypedMedia(item2.Id).Children中的变量item3) { 如果(item3.DocumentTypeAlias==“文件夹”) { //三级 //等等。。 } else if(item3.DocumentTypeAlias==“图像”) {
    • 图像url:@item3.url-大小:@(item3.GetPropertyValue(“umbracopytes”))
    • } } } else if(item2.DocumentTypeAlias==“图像”) {
    • 图像url:@item2.url-大小:@(item2.GetPropertyValue(“umbracopytes”))
    • } } } else if(item.DocumentTypeAlias==“Image”) {
    • 图像url:@item.url-大小:@(item.GetPropertyValue(“umbracopytes”))
    • } }
    根据媒体区中有多少文件夹,您可以按自己的喜好进行深度设置

    请参见代码中的注释。级别1是根介质文件夹,级别2是根目录下的文件夹,依此类推

    我刚刚在我的本地Umbraco实例上测试了它,它运行正常


    关于大小,它们以字节的形式出现,因此您可以使用GetPropertyValue(“umbracoBytes”)进行自己的计算。

    谢谢!我确实认为db xml字符串太过分了。很好的解决方案@亚舍,不客气。看编辑。我放了一个递归的解决方案。啊,如果这段代码可以在Umbraco中的列表视图-媒体的另一个名为size的列中实现,那就太好了!添加注释以触发通知,以便查看和使用更新的解决方案;)