Exemplo n.º 1
0
        public ResultSet SearchAllArticles(string terms, string type, int page, string lang)
        {
            ResultSet results = new ResultSet();

            SetContextLanguage(lang);

            int blurbLimit         = 150; // TODO: move to constant
            SearchResultsItem item = Sitecore.Context.Database.GetItem(Constants.Pages.SearchResults);

            if (item != null && !string.IsNullOrEmpty(item.SearchResultSummaryCharacterLimit.Raw))
            {
                blurbLimit = item.SearchResultSummaryCharacterLimit.Integer;
            }

            int                  totalResults   = 0;
            List <Article>       articles       = SearchHelper.PerformArticleSearch(terms, type, page, out totalResults);
            List <SearchArticle> searchArticles = new List <SearchArticle>();

            foreach (Article article in articles)
            {
                DefaultArticlePageItem articleItem = article.GetItem();
                if (articleItem == null)
                {
                    continue;
                }

                // Handle cases such as invalid link format exception
                try
                {
                    var sa = new SearchArticle
                    {
                        Title     = Common.Helpers.TextHelper.HighlightSearchTitle(terms, HttpUtility.HtmlDecode(articleItem.ContentPage.PageTitle.Rendered)),
                        Url       = articleItem.GetUrl(),
                        Thumbnail = articleItem.GetArticleThumbnailUrl(230, 129),
                        Blurb     = articleItem.GetSearchResultBlurb(blurbLimit),
                        Type      = articleItem.GetArticleType()
                    };

                    searchArticles.Add(sa);
                }
                catch (Exception ex)
                {
                    Sitecore.Diagnostics.Log.Error("Error populating search result", ex, this);
                }
            }

            results.Articles     = searchArticles;
            results.TotalMatches = totalResults;

            results.HasMoreResults = HasMoreResults(page, Constants.SEARCH_RESULTS_ENTRIES_PER_PAGE, results.Articles.Count(), totalResults);

            return(results);
        }
Exemplo n.º 2
0
        public Dictionary <string, string> GetArticleFilters()
        {
            var filters = new Dictionary <string, string>();

            filters.Add(string.Empty, DictionaryConstants.Featured);

            // Popular
            var log = new ActivityLog();

            if (log.HasPopularArticlesBySubtopic(InnerItem))
            {
                filters.Add(Guid.Empty.ToString(), DictionaryConstants.PopularLabel);
            }

            // Article type filter
            var articles = this.InnerItem
                           .Children
                           .FilterByContextLanguageVersion();

            if (articles.Any())
            {
                // Grab unique article template ids for this subtopic
                var templates = articles.Select(x => x.TemplateID)
                                .Distinct();

                foreach (Sitecore.Data.ID templateId in templates)
                {
                    string label = DefaultArticlePageItem.GetArticleType(templateId);
                    if (!string.IsNullOrEmpty(label))
                    {
                        filters.Add(templateId.ToString(), label);
                    }
                    else
                    {
                        Sitecore.Diagnostics.Log.Info(String.Format("No article type found for template: {0}", templateId), this);
                    }
                }
            }

            return(filters);
        }