我在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开发人员,你会如何实现这样的目标呢?
答案 0 :(得分:0)
不完全确定我知道为什么这是一个问题,但是这里...对不起,如果我误解了一些事情: - /
AFAIK,你应该可以从这个查询中得到你想要的东西:
Umbraco?.TypedContent(ParentId)?.Descendants().OfTypes("yourDocType")
关于配置(如何最好地获取RootId),您可以在根节点doctype上创建节点选择器属性(或者与要显示的位置相关的其他位置),从而选择要用作“root”的节点“/父母。
这样,如果开发人员共享数据库,那么节点ID将被设置并正常工作,当您部署代码时,每个环境都将通过后端/数据库设置自己的ID。
如果每个站点只设置一个节点ID,那么它就是“设置并忘记它”的场景,但是如果要使用多个列表,编辑者很容易自己选择父节点。