2013-04-11 57 views
2

如何通过特定的Document Type获取所有节点?umbraco - 如何通过文档类型获取所有节点

例如,我想用代码Document Type: s3Article得到所有节点后面的代码。我怎样才能做到这一点?


新信息:

IEnumerable<Node> nodes = uQuery.GetNodesByType("s3Article").Where(x => x.NiceUrl.Contains("en")); 

    lvArticles.DataSource = nodes; 
    lvArticles.DataBind(); 

这是我的代码。我不得不使用Where(x => x.NiceUrl.Contains("en")),因为我有2种语言版本 - 没有Where我从文档编号为s3Article的所有目录中接收节点,但我只想从一种语言版本获取节点。

问题是在这里:

<a href='<%# umbraco.library.NiceUrl(Tools.NumericTools.tryParseInt(Eval("id"))) %>'><%# Eval("title")%></a> 
<%# Tools.TextTools.makeIMGHTML("../.."+ Eval("img").ToString(),"180") %> 
<%# umbraco.library.StripHtml(Limit(Eval("Article"), 1000))%> 
<%# Eval("author")%> 

System.Web.HttpException:数据绑定: 'umbraco.presentation.nodeFactory.Node' 不包含一个名为 '标题' 属性。

同样的问题发生在标题,img,文章,作者。只有身份证才行得通。如何解决它?

回答

5

可以使用uQueryGetNodesByType(string or int)方法:

IEnumerable<Node> nodes = uQuery.GetNodesByType("s3Article"); 

或者,您也可以使用扩展方法来获得所有后代节点,然后在下面的答案按类型对它们进行查询:

Umbraco 4.6+ - How to get all nodes by doctype in C#?


你可以用这个来绑定一个用户控件中的控件,例如:

lvArticles.DataSource = nodes.Select(n => new { 
    ID: n.Id, 
    Title: n.GetProperty("title").Value, 
    Author: n.GetProperty("author").Value, 
    Article: n.GetProperty("article").Value, 
    Image: n.GetProperty("img").Value, 
}); 
lvArticles.DataBind(); 

只有你将需要剥离HTML,图像ID转换为URL等的SELECT语句中,以及...

+0

我使用一把umbraco 4.6.2,uquery在4.8 ..有其他解决方案? – whoah 2013-04-11 18:48:01

+1

您可以使用uComponents 3更旧版本的Umbraco:http://ucomponents.codeplex.com – Jonathan 2013-04-11 19:26:00

+1

@whoah,Jonathan是正确的,uQuery最初是uComponents的一部分。它以4.8+集成到Umbraco中,但仍可作为4.8版之前版本的uComponents软件包的一部分。 – 2013-04-11 20:15:54

1

随着香农Deminick提到,uQuery有点过时。 ExamineManager将是最快的执行时间。 https://our.umbraco.org/forum/developers/api-questions/45777-uQuery-vs-Examine-vs-IPublishedContent-for-Querying

我还发现它是使用ExamineManager的搜索构建器的最简单和最易读的方法。非常灵活,并且由于U团队使用的Fluent Builder模式而具有非常好的可读性。

这将搜索所有的节点,所以如果你需要一个特定的分支内,你可以使用.ParentId(1234)等

var query = ExamineManager.Instance.CreateSearchCriteria() 
          .NodeTypeAlias("yourDocumentType") 
          .Compile(); 

IEnumerable<IPublishedContent> myNodes = Umbraco.TypedSearch(query); 

我喜欢类型的节点,但你也可以只使用“搜索( )“而不是”TypedSearch()“,如果你喜欢动态节点。

包括一个特定的属性值 “myPropValue” == “ABC” 又如,

var query = ExamineManager.Instance.CreateSearchCriteria() 
        .NodeTypeAlias("yourDocumentType") 
        .Or() //Other predicate .And, .Not etc. 
        .Field("myPropValue", "ABC") 
        .Compile(); 

参考 - https://our.umbraco.org/documentation/reference/querying/umbracohelper/

相关问题