Umbraco中的媒体文件大小报告
我在CMS的媒体部分有很多图片。我想知道获取图像列表及其文件大小的最佳方法是什么 在数据库中操作xml字符串会更好还是在CMS前端添加一列更好?更新答案: 更快更好的递归解决方案:Umbraco中的媒体文件大小报告,umbraco,umbraco7,Umbraco,Umbraco7,我在CMS的媒体部分有很多图片。我想知道获取图像列表及其文件大小的最佳方法是什么 在数据库中操作xml字符串会更好还是在CMS前端添加一列更好?更新答案: 更快更好的递归解决方案: <ul id="imageList"> @foreach (var item in Umbraco.TypedMediaAtRoot()) { @ShowMediaItems(item) } </ul> @helper ShowMediaItems(IPublishedContent
<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的列中实现,那就太好了!添加注释以触发通知,以便查看和使用更新的解决方案;)