Типы отношений умбрако

В разделе для разработчиков Umbraco 6.1.6 есть узел Типы отношений.

Может ли кто-нибудь объяснить, что такое типы отношений и имеют ли они практическое применение. Я видел некоторую документацию, но до сих пор не уверен, зачем мне их использовать.

Они все еще актуальны в v6 и v7?


person wingyip    schedule 13.02.2014    source источник


Ответы (1)


Недавно я начал документировать 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