2

Umbraco 6.1.6 の Developer セクションには、Relation Typesノードがあります。

関係タイプとは何か、またそれらに実用的なアプリケーションがあるかどうかを説明できる人はいますか? いくつかのドキュメントを見てきましたが、なぜそれらを使用する必要があるのか​​ についてはまだわかりません.

それらは v6 と v7 でも関連していますか?

4

1 に答える 1

5

私は最近、Relations Service のドキュメント化を開始しました。これにより、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);
            }       
        }
    }
}
于 2014-02-13T20:38:13.837 に答える