/// <summary> /// Gets the content of the related items. /// </summary> /// <param name="part">The part.</param> /// <returns></returns> public IEnumerable<RelatedContentTypeModel> GetRelatedContent(RelatedContentPart part) { var culture = orchardServices.WorkContext.CurrentCulture; var settings = part.Settings.GetModel<RelatedContentRelationshipSettings>(); var relatedcontentFields = settings.RelatedContentFields.Split(new string[] { "<field>", "</field>" }, StringSplitOptions.RemoveEmptyEntries).ToList();//new List<string> { settings.RelatedContentFields1, settings.RelatedContentFields2, settings.RelatedContentFields3 }; var relatedcontentTypes = settings.RelatedcontentType.Split(new string[] { "<field>", "</field>" }, StringSplitOptions.RemoveEmptyEntries).ToList();//new List<string> { settings.RelatedcontentType1, settings.RelatedcontentType2, settings.RelatedcontentType3 }; var displayNames = settings.DisplayName.Split(new string[] { "<field>", "</field>" }, StringSplitOptions.RemoveEmptyEntries).ToList();//List<string> { settings.DisplayName1, settings.DisplayName2, settings.DisplayName3 }; var relatedContent = new List<RelatedContentTypeModel>(); var relatedContentfield = relatedcontentFields.GetEnumerator(); var displayNameEnumerator = displayNames.GetEnumerator(); foreach (var relatedcontentType in relatedcontentTypes) { var relatedContentTypes = new RelatedContentTypeModel { RelatedItems = new List<ContentItem>(), }; relatedContentfield.MoveNext(); displayNameEnumerator.MoveNext(); if (relatedcontentType == null) continue; if (relatedContentfield.Current == null) continue; var contentItems = contentManager.Query().ForType(relatedcontentType).List(); relatedContentTypes.Name = displayNameEnumerator.Current; foreach (var contentItem in contentItems) { var fieldElements = relatedContentfield.Current.Split('.'); dynamic element = Dynamic.InvokeGet(contentItem, contentItem.ContentType); foreach (var fieldElement in fieldElements) { element = Dynamic.InvokeGet(element, fieldElement.Trim()); } element = Dynamic.InvokeGet(element, "Ids"); int[] participantIds = element; if (participantIds.Contains(part.Id)) { if (CanAdd(contentItem, contentItems, culture, fieldElements, part.Id)) relatedContentTypes.RelatedItems.Add(contentItem); } } relatedContentTypes.RelatedItems = relatedContentTypes.RelatedItems.OrderBy(i => i.As<TitlePart>().Title).ToList(); relatedContent.Add(relatedContentTypes); } return relatedContent; }
private void SetupLazyFields(ActivatedContentContext context, RelatedContentPart part) { part.RelatedContentTypesField.Loader(() => relatedContentService.GetRelatedContent(part)); }