Пример #1
0
        /// <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!");
        }
Пример #2
0
        /// <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);
        }