繁体   English   中英

Umbraco CMS中的特殊C#树算法

[英]A special C# Tree algorithm in Umbraco CMS

我正在创建一个特殊的树算法,我需要一些有关当前代码的帮助,但是在您看一下它之前,请让我解释一下它的真正含义。

我具有树结构,并且正在与一个节点(树中的任何节点(这些节点是Umbraco CMS类))进行交互,因此在交互时,我将树渲染到顶部(到根)并获取这些值在全局集合中(在这种情况下为List<Node> )。 到目前为止,还可以,但是在与另一个节点进行其他交互时,我必须检查列表是否已包含单击节点的父级,如果它确实包含每个父级并且不包含此节点,则交互位于最低级水平(希望您还和我在一起?)。

不幸的是,在Umbraco CMS中调用Contains()函数不会检查列表是否已包含值,即使我添加了Contains()函数也无法使列表重新添加相同的值。

如果他已经遇到这样的问题,谁能在这里帮我? 我将Contains()函数交换为ExceptUnion函数,它们产生相同的结果-它们确实包含重复项。

var currentValue = (string)CurrentPage.technologies;
    List<Node> globalNodeList = new List<Node>();
    string[] result = currentValue.Split(',');
    foreach (var item in result)
    {
        var node = new Node(int.Parse(item));
        if (globalNodeList.Count > 0)
        {
            List<Node> nodeParents = new List<Node>();

            if (node.Parent != null)
            {
                while (node != null)
                {
                    if (!nodeParents.Contains(node))
                    {
                        nodeParents.Add(node);
                    }
                    node = (Node)node.Parent;
                }
            }

            else { globalNodeList.Add(node); }

            if (nodeParents.Count > 0)
            {
                var differences = globalNodeList.Except<Node>(globalNodeList);
                globalNodeList = globalNodeList.Union<Node>(differences).ToList<Node>();
            }
        }
        else
        {
            if (node.Parent != null)
            {
                while (node != null)
                {
                    globalNodeList.Add(node);
                    node = (Node)node.Parent;
                }
            }
            else
            {
                globalNodeList.Add(node);
            }
        }
    }
}

如果我理解您的问题,您只想查看特定节点是否是另一个节点的祖先。 如果是这样,只需(字符串)检查节点的Path属性。 path属性是逗号分隔的字符串。 无需自己构建列表。

仅myNode.Path.Contains(“,1001”)将起作用。

小话。

  1. 如果您使用的是Umbraco 6,请使用IPublishedContent而不是Node。
  2. 如果您像您一样建立清单,我希望您可以为Umbraco辅助程式提供多个编号,并让umbraco建立清单(从快取中)。

对于第二点,您可以执行以下操作:

var myList = Umbraco.Content(1001,1002,1003);

或带有数组/列表

var myList = Umbraco.Content(someNode.Path.Split(','));

并且由于要爬到根目录,可能需要添加.Reverse()

可以在文档中找到有关UmbracoHelper的更多信息: http ://our.umbraco.org/documentation/Reference/Querying/UmbracoHelper/

如果您使用的是Umbraco 4,则可以使用@ Library.NodesById(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM