Umbraco подсчитывает страницы с активным контентом

Я хотел бы получить количество страниц в узлах на сайте Umbraco с выводом примерно так:

  • Root (9 subnodes)
    • First Folder (4 subnodes)
      • document 1
      • документ 2
      • документ 3
      • документ 4
    • Second Folder (3 subnodes)
      • document 1
      • документ 2
      • документ 3

По сути, я пытаюсь увидеть, сколько активного контента есть на данном сайте, и найти способ разделить работу. Есть ли разумный способ получить эту информацию?


person ericdc    schedule 09.10.2014    source источник
comment
Активен, как в Опубликовано?   -  person Morten OC    schedule 10.10.2014
comment
да. Опубликованный контент.   -  person ericdc    schedule 10.10.2014


Ответы (1)


Это сработало для меня:

  • Descendants.cs в папке App_Code

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using umbraco.presentation;
    using umbraco.presentation.nodeFactory;
    
    public static class ExtensionMethods
    {
        public static IEnumerable<Node> AllDescendants(this Node node)
        {
            foreach (Node child in node.Children)
            {
                yield return child;
    
                foreach (Node grandChild in child.AllDescendants())
                    yield return grandChild;
            }
        }
    }
    
  • бритвенный вид

    @inherits Umbraco.Web.Mvc.UmbracoTemplatePage
    @using umbraco.presentation.nodeFactory;
    @{
       Layout = "";
    }
    
    @functions{
       public string CreateSitemap()
       {
            var temp = "<ul class='collapsibleList'>" + sitemap(-1) + "</ul>" + Environment.NewLine;
           return temp;
       }
    
    public string sitemap(int nodeID)
    {
        var rootNode = new umbraco.presentation.nodeFactory.Node(nodeID);
        var sitemapstring = "<li>" + rootNode.Name + " (" + rootNode.AllDescendants().Count() + ") <span style='font-size:9px'>" + rootNode.NodeTypeAlias + "</span></li>" + Environment.NewLine;
    
    if (rootNode.Children.Count > 0)
    {
        sitemapstring += "<ul>" + Environment.NewLine;
        sitemapstring = rootNode.Children.Cast<Node>().Aggregate(sitemapstring, (current, node) => current + sitemap(node.Id));
        sitemapstring += "</ul>" + Environment.NewLine;
    }
    return sitemapstring;
    }
    }
    <body>
     @Html.Raw(CreateSitemap())
    </body>
    
person ericdc    schedule 13.10.2014