2013-04-10 55 views
2

我有一个名为“Demo”的数据类型我也有一个名为“Test”的页/节点。 如果我不在任何类型的背景?Umbraco,通过名称和数据类型获取节点

我一直在使用新的节点(-1)尝试和选择了我的方式,但我真的不能图这一个..

提前感谢!

+0

您使用的是哪种版本的Umbraco? – 2013-04-10 17:35:10

回答

6

最简单的方法很可能是使用以下uQuery扩展名之一:

下面是几个例子:

GetNodesByName(串) :

umbraco.NodeFactory.Node node = uQuery.GetNodesByName("Page Name") 
    .Where(n => n.NodeTypeAlias == "NodeTypeAlias").FirstOrDefault(); 

if (node != null) 
{ 
    //... 
} 

GetNodesByType(字符串或INT):

umbraco.NodeFactory.Node node = uQuery.GetNodesByType("NodeTypeAlias") 
    .Where(n => n.Name == "Page Name").FirstOrDefault(); 

if (node != null) 
{ 
    //... 
} 
+0

由于Document是发布的节点,并且没有方法GetDocumentByName()您如何获取仅发布的节点或检查节点是否已发布? – VinnyG 2013-11-12 21:33:15

+0

好吧,它似乎只返回发布的那些,如果我想通过名称取消发布的节点,我该怎么办? – VinnyG 2013-11-12 22:53:47

+0

'Node'允许访问XML缓存中已发布的节点或节点,而'Document'则允许访问所有节点,包括未发布节点或数据库中的所有节点。由于查询数据库代价昂贵,我不建议通过名称获取节点,但如果您真的需要,可以获取root的所有后代,然后获得与特定名称匹配的第一个后代。 – 2013-11-12 23:25:56

5

用一把umbraco 6+我认为这将是最好...

public static IPublishedContent GetNodeByAlias(string alias) 
{ 
    var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 
    var contentNode = umbracoHelper.TypedContentSingleAtXPath(String.Format("//{0}", alias)); 

    return contentNode; 
} 

这只是需要一个文档类型别名,使用当前的Umbraco上下文找到您的节点为IPublishedContent。 UmbracoHelper也为你提供了很多选择。

相关问题