コード例 #1
0
        public static List <BlogLinkItem> GetBlogLinksWithPostCounts(AgilityContentItem blogConfig, IAgilityContentRepository <AgilityContentItem> postsRepo, IAgilityContentRepository <AgilityContentItem> blogLinksRepo, List <DateTime> blogLinksDates, bool getCounts)
        {
            //blog links can be either Categories or Tags
            var cacheKey = string.Format("Agility.Components.Blog.GetBlogLinksWithPostCounts_{0}_{1}_{2}_{3}", blogConfig.ContentID, postsRepo.ContentReferenceName, (blogLinksRepo != null ? blogLinksRepo.ContentReferenceName : ""), (blogLinksDates != null ? blogLinksDates.Count : 0));
            List <BlogLinkItem> links = HttpContext.Current.Cache[cacheKey] as List <BlogLinkItem>;

            if (links != null)
            {
                return(links);
            }

            lock (_getBlogLinksCountsCacheLock)
            {
                if (links != null)
                {
                    return(links);
                }



                if (blogLinksDates != null && blogLinksDates.Any())
                {
                    links = blogLinksDates.Select(i => new BlogLinkItem()
                    {
                        Title     = i.ToString("MMMM yyyy"),
                        Url       = string.Format("{0}?month={1}", BlogContext.GetBlogRootPath(blogConfig), i.ToString("MM-yyyy")),
                        PostCount = (getCounts ? BlogUtils.GetPostCountByDate(postsRepo, i) : 0),
                    }).ToList();
                }
                else if (blogLinksRepo != null)
                {
                    var items = blogLinksRepo.Items();
                    links = items.Select(i => new BlogLinkItem()
                    {
                        Title      = i["Title"] as string,
                        Url        = i.BlogDynamicUrl(blogConfig, null),
                        PostCount  = (getCounts ? BlogUtils.GetPostCount(postsRepo, i) : 0),
                        ImageUrl   = GetBlogPostListingImageUrl(i),
                        ImageLabel = GetBlogPostListingImageTitle(i),
                        Excerpt    = ""
                    }).ToList();
                }

                HttpContext.Current.Cache.Add(cacheKey, links, null, DateTime.Now.AddHours(2), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);

                return(links);
            }
        }