2013-04-11 72 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/

相關問題