umbraco - 如何按文档类型获取所有节点

时间:2013-04-11 14:47:52

标签: umbraco

如何按特定Document Type获取所有节点?

例如,我希望使用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我从doctype 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:DataBinding:   &#39; umbraco.presentation.nodeFactory.Node&#39;不包含名为&#39; title&#39;。

的属性

标题,img,文章,作者也会出现同样的问题。只有ID很好用。如何解决?

2 个答案:

答案 0 :(得分:5)

您可以使用uQuery GetNodesByType(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();

只有您需要在select语句中删除html,将图片ID转换为网址等...

答案 1 :(得分:2)

正如Shannon 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);

我更喜欢键入节点,但如果您更喜欢动态节点,也可以使用“Search()”而不是“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/