在Umbraco 6.1.6的Developer部分中,有一个 Relation Types 节点。
任何人都可以解释什么是关系类型,以及它们是否具有实际应用。我看过一些文档,但仍然不确定为什么我可能需要使用它们。
它们在v6和v7中是否仍然相关?
答案 0 :(得分:5)
我最近开始记录Relations Service,它应该提供一些有关您可以用它做什么的见解。我偶尔使用它来维护内容树中节点之间的关系。
如果您在Umbraco中复制节点,则可以选择将新节点与使用名为“Relate Document On Copy”的关系类型的原始节点相关联。例如,使用该关系,您可以挂钩事件(如Save事件),每当更新父事件时,您还可以更新相关的子节点。此技术有时用于需要跨每种语言同步内容的多语言网站。
以下是我正在处理的最近项目中的缩写示例,其中可能会创建重复出现的事件。我们需要知道系列中的第一个事件以及事件的所有后续事件(子项)。
public class Events : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
ContentService.Saved += ContentServiceSaved;
}
private void ContentServiceSaved(IContentService sender, SaveEventArgs<IContent> e)
{
var rs = ApplicationContext.Current.Services.RelationService;
var relationType = rs.GetRelationTypeByAlias("repeatedEventOccurence");
foreach (IContent content in e.SavedEntities)
{
var occurences = rs.GetByParentId(content.Id).Where(r => r.RelationType.Alias == "repeatedEventOccurence");
bool exists = false;
foreach (var doc in occurences.Select(o => sender.GetById(o.ChildId)))
{
// Check if there is already an occurence of this event with a matching date
}
if (!exists)
{
var newDoc = sender.Copy(content, eventsDoc.Id, true, User.GetCurrent().Id);
// Set any properties you need to on the new node
...
rs.Relate(content, newDoc, relationType);
}
}
}
}