Недавно я начал документировать Relations Service, которая должна предоставлять некоторые понимание того, что вы можете сделать с ним. Я иногда использую его для поддержания отношений между узлами в дереве контента.
Если вы когда-либо копируете узел в Umbraco, вы получаете возможность связать новый узел с оригиналом, который использует тип отношения, называемый «Связать документ при копировании». Например, с установленным отношением вы можете подключиться к таким событиям, как событие «Сохранить», и всякий раз, когда обновляется родительский элемент, вы также можете обновлять связанные дочерние узлы. Этот метод иногда используется на многоязычных сайтах, где требуется синхронизация контента на каждом языке.
Ниже приведен сокращенный пример из недавнего проекта, над которым я работаю, в котором может быть создано повторяющееся событие. Нам нужно знать первое событие в серии, а также все последующие вхождения события (дочерние элементы).
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);
}
}
}
}
person
ProNotion
schedule
13.02.2014