/// <summary> /// Default search hit, which utilizes a 'vulcanSearchDescription' to set the summary, which can be added to content models via IVulcanSearchHitDescription; /// </summary> /// <param name="contentHit"></param> /// <param name="contentLoader"></param> /// <returns></returns> public static VulcanSearchHit DefaultBuildSearchHit(IHit <IContent> contentHit, IContentLoader contentLoader) { ContentReference contentReference = null; if (ContentReference.TryParse(contentHit.Id, out contentReference)) { IContent content; if (contentLoader.TryGet(contentReference, out content)) { var searchDescriptionCheck = contentHit.Fields.Where(x => x.Key == SearchDescriptionField).FirstOrDefault(); string storedDescription = searchDescriptionCheck.Value != null ? (searchDescriptionCheck.Value as JArray).FirstOrDefault().ToString() : null; var fallbackDescription = content as IVulcanSearchHitDescription; string description = storedDescription != null?storedDescription.ToString() : fallbackDescription != null ? fallbackDescription.VulcanSearchDescription : string.Empty; var result = new VulcanSearchHit() { Id = content.ContentLink, Title = content.Name, Summary = description, Url = urlResolver.GetUrl(contentReference) }; return(result); } } throw new Exception($"{nameof(contentHit)} doesn't implement IContent!"); }
/// <summary> /// Default search hit, which utilizes a 'vulcanSearchDescription' to set the summary, which can be added to content models via IVulcanSearchHitDescription; /// </summary> /// <param name="contentHit"></param> /// <param name="contentLoader"></param> /// <returns></returns> public static VulcanSearchHit DefaultBuildSearchHit(IHit <IContent> contentHit, IContentLoader contentLoader) { if (!ContentReference.TryParse(contentHit.Id, out var contentReference) || !contentLoader.TryGet(contentReference, out IContent content)) { throw new Exception($"{nameof(contentHit)} doesn't implement IContent!"); } var localizable = content as ILocalizable; var searchDescriptionCheck = contentHit.Fields.FirstOrDefault(x => x.Key == SearchDescriptionField); var storedDescription = (searchDescriptionCheck.Value as JArray)?.FirstOrDefault()?.ToString(); // ReSharper disable once SuspiciousTypeConversion.Global var description = storedDescription ?? (content as IVulcanSearchHitDescription)?.VulcanSearchDescription ?? string.Empty; var result = new VulcanSearchHit { Id = content.ContentLink, Title = content.Name, Summary = description, Url = UrlResolver.Service.GetUrl(contentReference, localizable?.Language.Name ?? "", new UrlResolverArguments()) // fixes null ref exception caused by extension }; return(result); }