处理Umbraco中的父/子内容关系

时间:2016-10-18 10:13:47

标签: umbraco umbraco7

我在Umbraco有一个设置,我想要一些不同的文档类型,以便为编辑器提供层次关系。因此,我配置了文档类型A以允许文档类型B的“子”。我还配置了文档类型B以允许文档类型C的“子”。

在视图的列表中,我想显示共享类型A的特定祖先的所有类型C的文档(即,此处类型B的直接父级是无关紧要的)。我在控制器中使用类似这样的代码:

install.packages("rvest")
library(rvest)
keywords<-read_html("http://ieeexplore.ieee.org/document/6875970/keywords")

keywords %>% 
a<-html_node(lego_movie,"text/javascript") %>%
html_text(a)

var rootChildren = Umbraco?.TypedContent(RootId)?.Children; var items = rootChildren .SelectMany(rc => rc?.Children? .Where(c => c != null && c.GetPropertyValue<Boolean>(FieldNames.SomeValue))); var viewModels = allItems.Select(p => new SomeViewModel { // Object initialization code }); return viewModels.ToArray(); 的值从RootId读取,因此可以针对不同的环境进行更改或不相等。

我觉得一个缺点是,我的代码与我在后台设置的编辑器的具体内容纠缠在一起。我想我可以通过使用像ConfigurationSection这样的“软”选择方法来解决这个问题。 (我认为在使用任何CMS时,与文档类型绑定是一种常见的麻烦。)

IEnumerable<IPublishedContent>.DescendantsOrSelf(SomeDocumentTypeAlias)这样的“软”选择方法却无法解决使用哪个节点作为起点的问题。因为站点根目录中可以有任意数量的A类内容,所以我不能使用文档类型。

此外,由于Umbraco节点ID似乎无法预测,在开发人员和其他环境之间共享内容,我对基于配置的解决方案并不完全满意,因为从版本控制的角度来看,它并不完美。

虽然我非常熟悉ASP.NET MVC等,但我对Umbraco的最佳实践知之甚少,所以这就是我所要求的;作为一名经验丰富的Umbraco开发人员,你会如何实现这样的目标呢?

1 个答案:

答案 0 :(得分:0)

不完全确定我知道为什么这是一个问题,但是这里...对不起,如果我误解了一些事情: - /

AFAIK,你应该可以从这个查询中得到你想要的东西:

Umbraco?.TypedContent(ParentId)?.Descendants().OfTypes("yourDocType")

关于配置(如何最好地获取RootId),您可以在根节点doctype上创建节点选择器属性(或者与要显示的位置相关的其他位置),从而选择要用作“root”的节点“/父母。

这样,如果开发人员共享数据库,那么节点ID将被设置并正常工作,当您部署代码时,每个环境都将通过后端/数据库设置自己的ID。

如果每个站点只设置一个节点ID,那么它就是“设置并忘记它”的场景,但是如果要使用多个列表,编辑者很容易自己选择父节点。