Welcome to the navigation

Nisi nostrud dolore aliquip exercitation ex proident, qui anim reprehenderit esse ut nulla eiusmod elit, dolor est consequat, in mollit cillum magna irure duis aute. Est sint amet, ea elit, aliquip cillum culpa velit qui eu incididunt ut mollit pariatur, deserunt voluptate dolor lorem tempor in id ad proident, in

Yeah, this will be replaced... But please enjoy the search!

Clean up your Umbraco Templates and Document Types

Categories Tags

I run a couple of Umbraco sites and as usual after a couple of years some sites tend to become a bit dirty. The cleaning could be 100 % automated but thats to risky business for me but having some visual help in Template and Document Type usage was welcome. So by the help of uComponents uQuery I made some outputs. Where you put the code is up to you, I did put it in an ascx file and run it as a macro.

Usings

using System;
using System.Collections.Generic;
using System.Linq;
using uComponents.Core;
using umbraco.cms.businesslogic.template;
using umbraco.cms.businesslogic.web;
using umbraco.interfaces;
using umbraco.NodeFactory;

The Code

/// <summary>
/// Invoke this method...
/// </summary>
private void WhatsUp()
{
    // Start at root level (-1) and populate the AllNodes property
    GetAllNodesAsFlatList(new Node(-1));
    PrintResultInfo("Templates", GetTemplateResult());
    PrintResultInfo("Document Types", GetDocTypeInfo());
}
 
/// <summary>
/// Return alias and occurences of all templates
/// </summary>
/// <returns></returns>
private List<Result> GetTemplateResult()
{
    return
        Template.GetAllAsList().Select(
            template =>
            new Result {Alias = template.Alias, Count = AllNodes.Count(x => x.template.Equals(template.Id))}).
            ToList();
}
 
/// <summary>
/// Return alias and occurences of all document types
/// </summary>
/// <returns></returns>
private List<Result> GetDocTypeInfo()
{
    return
        DocumentType.GetAllAsList().Select(
            documentType =>
            new Result() { Count = GetNodesByNodeType(documentType.Id), Alias = documentType.Alias }).ToList();
}
 
private int GetNodesByNodeType(int documentType)
{
    var nodes = uQuery.GetNodesByType(documentType);
    if (nodes == null)
        return 0;
 
    return nodes.Count;
}
 
/// <summary>
/// Print the result info
/// </summary>
/// <param name="header"></param>
/// <param name="results"></param>
private void PrintResultInfo(string header, List<Result> results)
{
    Response.Write(string.Format("<h1>{0}</h1>", header));
    Response.Write("<h2>Empty</h2>");
    foreach (Result result in results.Where(x => x.Count.Equals(0)))
    {
        Response.Write(string.Format("{0} [{1}]<br />", result.Alias, result.Count));
    }
 
    Response.Write("<h2>Used</h2>");
    foreach (Result result in results.Where(x => !x.Count.Equals(0)))
    {
        Response.Write(string.Format("{0} [{1}]<br />", result.Alias, result.Count));
    }
}
 
/// <summary>
/// Storage for GetAllNodesAsFlatList
/// </summary>
private readonly List<INode> AllNodes = new List<INode>();
 
/// <summary>
/// Get all child nodes from a certain node
/// </summary>
/// <param name="startNode"></param>
private void GetAllNodesAsFlatList(INode startNode)
{
    AllNodes.Add(startNode);
 
    // Traverse the above throug the node
    List<INode> children = startNode.ChildrenAsList;
    if (!children.Any())
        return;
 
    foreach (INode child in children)
    {
        GetAllNodesAsFlatList(child);
    }
}
 
/// <summary>
/// Result object
/// </summary>
private class Result
{
    public int Count { get; set; }
    public string Alias { get; set; }
}

The result

I did truncate the result to max 5 posts, the actual result was hundreds of lines :) The result shows empty and used as groups with the alias and number of nodes that are using the Document Type or Template.

 

Thats it! Cheers