public ActionResult Index(int?page) { const string assetsPrefix = "finance.index"; const int articlesPerPage = 6; var pageNum = page ?? 1; // *** should be using skip/take collection symantic here ...all the way through to the service *** var startRow = articlesPerPage * (pageNum - 1) + 1; var metadata = MetadataService.GetMetadataForPage(HttpContext); var financeTask = VehicleContentService.GetArticlesByTopicAsync("finance", startRow, articlesPerPage); financeTask.Wait(); var financeArticles = financeTask.Result; var totalNumOfPages = financeArticles.TotalRecords > articlesPerPage ? (int)Math.Ceiling(((decimal)financeArticles.TotalRecords / articlesPerPage)) : 1; var viewModel = new IndexViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), FinanceArticles = financeArticles.Articles, Paginator = new Paginator("/finance/", totalNumOfPages, pageNum) }; return(View("Index", viewModel)); }
public ActionResult ArticlePage(int contentId, int page) { var articlePageTask = VehicleContentService.GetArticlePageAsync(contentId, page); articlePageTask.Wait(); var articlePage = articlePageTask.Result; return(null); }
public ActionResult BuyingGuidesByCategory(string categorySeoName) { const string assetsPrefix = "buyingguides.articlecategory"; var metadata = MetadataService.GetMetadataForPage(HttpContext); var categoriesSectionTask = VehicleContentService.GetArticlesByCategoryAttributeSeoNameAsync(categorySeoName); categoriesSectionTask.Wait(); var categoriesSectionArticles = categoriesSectionTask.Result; var viewModel = new CategoryViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), CategoriesSectionArticles = categoriesSectionArticles.Articles, VehicleCategoryName = categoriesSectionArticles.Category }; return(View("ArticleCategory", viewModel)); }
public ActionResult Index() { const string assetsPrefix = "site.index"; const int startRow = 1; const int take = 9; var metadata = MetadataService.GetMetadataForPage(HttpContext); var buyingGuides = VehicleContentService.GetArticlesByTopic("buying guides", startRow, take); var viewModel = new IndexViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), TrackMeta = new TrackMeta(metadata), BuyingGuides = buyingGuides.Articles }; return(View("Index", viewModel)); }
public ActionResult Index(int?page) { const string assetsPrefix = "buyingguides.index"; const int articlesPerPage = 6; var metadata = MetadataService.GetMetadataForPage(HttpContext); var pageNum = page ?? 1; // *** should be using skip/take collection semantic here ...all the way through to the service *** var startRow = articlesPerPage * (pageNum - 1) + 1; var financeTask = VehicleContentService.GetArticlesByTopicAsync("finance", startRow, articlesPerPage); var mostRecentGroupTask = VehicleContentService.GetArticlesGroupMostRecentAsync(); var categoriesTask = VehicleContentService.GetArticlesByVehiclesCategoryAsync(); mostRecentGroupTask.Wait(); var mostRecentGroup = mostRecentGroupTask.Result; financeTask.Wait(); var financeArticles = financeTask.Result; categoriesTask.Wait(); var categoriesArticles = categoriesTask.Result; var viewModel = new IndexViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), TrackMeta = new TrackMeta(metadata), MostRecentGroup = mostRecentGroup.Articles, FinanceArticles = financeArticles.Articles, CategoriesArticles = categoriesArticles.Articles, }; return(View("Index", viewModel)); }
public ActionResult Article(string title, int contentId) { const string assetsPrefix = "finance.article"; const int numAdUnits = 4; var metadata = MetadataService.GetMetadataForPage(HttpContext); var articleTask = VehicleContentService.GetArticleByIdAsync(contentId); articleTask.Wait(); var article = articleTask.Result; var makeTranslator = String.Empty; var modelTranslator = String.Empty; var yearTranslator = String.Empty; var categoryTranslator = String.Empty; if (article.Make.IsNotNullOrEmpty()) { makeTranslator = UriTokenTranslators.GetMakeTranslatorByName(article.Make).Name; } if (article.Model.IsNotNullOrEmpty()) { modelTranslator = UriTokenTranslators.GetModelTranslatorByName(article.Model).Name; } if (article.Year.ToString().IsNotNullOrEmpty()) { yearTranslator = article.Year.ToString(); } if (article.VehicleCategory.IsNotNullOrEmpty()) { var tempcategoryTranslator = UriTokenTranslators.GetCategoryTranslatorByName(article.VehicleCategory); if (tempcategoryTranslator != null) { categoryTranslator = tempcategoryTranslator.Name; } } var currentUrl = HttpContext.Request.Url.AbsoluteUri; // throws a 404 exception if the current URL doesn't match the URL of the article. if (article.Url.IsNullOrEmpty() || currentUrl.IndexOf(article.Url) == -1) { throw new HttpException(404, "HTTP/1.1 404 Not Found"); } ICollection <ArticleAd> ads = new Collection <ArticleAd>(); IList <ICollection <ArticleAd> > articleAds = new List <ICollection <ArticleAd> >(); IList <TrackerVehicle> articleVehicles = new List <TrackerVehicle>(); TrackerVehicle vehicle; // set article page ads foreach (var articlePage in article.ArticlePages) { ads = articlePage.AdUnits; articleAds.Add(ads); if (articlePage.Make != null) { vehicle = new TrackerVehicle { Make = articlePage.Make, Model = articlePage.Model, SuperModel = articlePage.Model, Year = articlePage.Year }; } else { vehicle = new TrackerVehicle { Make = makeTranslator, Model = modelTranslator, SuperModel = modelTranslator, Year = Int32.Parse(yearTranslator) }; } articleVehicles.Add(vehicle); } // set article page ads for endcap ICollection <ArticleAd> adsEndcap = new Collection <ArticleAd>(); for (var adUnit = 1; adUnit <= numAdUnits; adUnit++) { var articleAdUnit = article.AdUnits.FirstOrDefault(x => x.AdUnitId == adUnit); adsEndcap.Add(new ArticleAd { AdMake = articleAdUnit.AdMake ?? String.Empty, AdModel = articleAdUnit.AdModel ?? String.Empty, AdVehicleYear = articleAdUnit.AdVehicleYear, AdCategory = articleAdUnit.AdCategory ?? String.Empty, AdUnitId = articleAdUnit.AdUnitId }); } articleAds.Add(adsEndcap); var articleVehiclesJsonStr = JsonConvert.SerializeObject(articleVehicles); var articleAdsJsonStr = JsonConvert.SerializeObject(articleAds); var viewModel = new ArticleViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), AdvertMeta = new AdvertMeta(new { ads = articleAds[0] }) , PageMeta = new PageMeta { Title = article.Title, Canonical = "http://www.car.com" + article.Url, Keywords = article.MetaKeywords, Description = article.MetaDescription }, TrackMeta = new TrackMeta { Make = makeTranslator, SuperModel = modelTranslator, Year = yearTranslator, Category = categoryTranslator }, OpenGraphMeta = new OpenGraphMeta { Title = article.Title, Description = article.MetaDescription, Type = "article", Url = "http://www.car.com" + article.Url, Images = article.ArticlePages.Select(x => x.PageImage).Where(x => x.IsNotNullOrEmpty()).ToList() }, Article = article }; viewModel.RegisterPageJson(articleVehiclesJsonStr, "ABT.pageJson.articleVehicles"); viewModel.RegisterPageJson(articleAdsJsonStr, "ABT.pageJson.articleAds"); ArticleGalleryViewModel articleGallery = new ArticleGalleryViewModel(); { articleGallery.Article = viewModel.Article; } viewModel.ArticleGallery = articleGallery; return(View("Article", viewModel)); }
private static void CacheAllSiteMapData() { try { var pagesBySectionDict = new Dictionary <string, IEnumerable <Page> >(); var lastModified = DateTime.Now.ToString("yyyy-MM-dd"); #region **! Here, we are caching all the sitemap sections for the sitemap-index page. _sections = SectionNames .Select(sectionName => new Section { DomainAndPath = String.Format("{0}/sitemap/{1}", Host, sectionName), LastModified = lastModified }); #endregion #region **! Here, we are caching all the pages for each sitemap section. #region Cache all pages for the *general* sitemap section. const string generalSection = "general"; pagesBySectionDict.Add(generalSection, new List <Page> { new Page { DomainAndPath = Host, LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Top }, new Page { DomainAndPath = String.Format("{0}/{1}", Host, "cars-for-sale"), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Medium } }); #endregion #region Cache all pages for the *car-research* sitemap section. // NOTE: We are only going after all the *NEW* cars in this section. const string researchSection = "car-research"; // landing page var researchPages = new List <Page> { new Page { DomainAndPath = String.Format("{0}/{1}", Host, researchSection), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Top } }; // make pages var researchMakes = UriTokenTranslators.GetAllMakeTranslators() .Where(make => make.IsActive) .Select(make => new Dto.CarResearchUrl { Make = make.SeoName }).ToList().OrderBy(s => s.Make); researchPages.AddRange(researchMakes .Select(carResearchUrl => new Page { DomainAndPath = String.Format("{0}/{1}", Host, carResearchUrl.Make), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Medium }).ToList()); // make/super-model pages var researchMakeSuperModels = VehicleSpecService.GetAllNewSuperModels() .Select(superModel => new Dto.CarResearchUrl { Make = UriTokenTranslators.GetMakeTranslatorByName(superModel.Make).SeoName, SuperModel = superModel.SeoName }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel); researchPages.AddRange(researchMakeSuperModels .Select(carResearchUrl => new Page { DomainAndPath = String.Format("{0}/{1}/{2}", Host, carResearchUrl.Make, carResearchUrl.SuperModel), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Medium }).ToList()); // make/super-model/year pages var makeSuperModelYears = (from superModel in VehicleSpecService.GetAllNewSuperModels() from year in superModel.Years where year.IsNew select new Dto.CarResearchUrl { Make = UriTokenTranslators.GetMakeTranslatorByName(superModel.Make).SeoName, SuperModel = superModel.SeoName, Year = year.Number }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel).ThenBy(s => s.Year); researchPages.AddRange(makeSuperModelYears .Select(carResearchUrl => new Page { DomainAndPath = String.Format("{0}/{1}/{2}/{3}", Host, carResearchUrl.Make, carResearchUrl.SuperModel, carResearchUrl.Year), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Medium }).ToList()); // make/super-model/year/trim pages var makeSuperModelYearTrims = (from msmy in makeSuperModelYears from trim in VehicleSpecService.GetTrimsByMakeBySuperModelByYear(msmy.Make, msmy.SuperModel, msmy.Year) select new Dto.CarResearchUrl { Make = msmy.Make, SuperModel = msmy.SuperModel, Year = msmy.Year, Trim = trim.CanonicalSeoName }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel).ThenBy(s => s.Trim).ThenBy(s => s.Year); var makeSuperModelYearTrimsDistinct = makeSuperModelYearTrims.GroupBy(x => x.Trim).Select(g => g.First()); researchPages.AddRange(makeSuperModelYearTrimsDistinct .Select(carResearchUrl => new Page { DomainAndPath = String.Format("{0}/{1}/{2}/{3}/{4}", Host, carResearchUrl.Make, carResearchUrl.SuperModel, carResearchUrl.Year, carResearchUrl.Trim), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Medium }).ToList()); // make/super-model/year/trim/section pages var trimSectionNames = new List <string> { "specifications", "color", "warranty", "pictures-videos", "incentives", "safety" }; var makeSuperModelYearTrimSections = (from msmyt in makeSuperModelYearTrimsDistinct from sectionName in trimSectionNames select new Dto.CarResearchUrl { Make = msmyt.Make, SuperModel = msmyt.SuperModel, Year = msmyt.Year, Trim = msmyt.Trim, Section = sectionName }).ToList().OrderBy(s => s.Make).ThenBy(s => s.SuperModel).ThenBy(s => s.Trim).ThenBy(s => s.Year).ThenBy(s => s.Section); researchPages.AddRange(makeSuperModelYearTrimSections .Select(carResearchUrl => new Page { DomainAndPath = String.Format("{0}/{1}/{2}/{3}/{4}/{5}", Host, carResearchUrl.Make, carResearchUrl.SuperModel, carResearchUrl.Year, carResearchUrl.Trim, carResearchUrl.Section), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Low }).ToList()); // Add them all here! pagesBySectionDict.Add(researchSection, researchPages); #endregion #region Cache all pages for the *buying-tools* sitemap section. const string toolsSection = "buying-tools"; var toolNames = new List <string> { "tools/car-comparison", "tools/calculators", "tools/calculators/payment-calculator", "tools/calculators/affordability-calculator", "tools/calculators/fuel-savings-calculator", "tools/calculators/lease-vs-buy-calculator", "tools/calculators/early-payoff-calculator", "tools/calculators/rebate-vs-financing-calculator", "tools/used-car-values" }; var toolPages = new List <Page> { new Page { DomainAndPath = String.Format("{0}/{1}", Host, "tools"), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Monthly, Priority = Priority.Top } }; toolPages.AddRange(toolNames .Select(toolName => new Page { DomainAndPath = String.Format("{0}/{1}", Host, toolName), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Monthly, Priority = Priority.Medium })); // Add them all here! pagesBySectionDict.Add(toolsSection, toolPages); #endregion #region Cache all pages for the *content* sitemap section. const string contentSection = "content"; var contentPages = new List <Page> { new Page { DomainAndPath = String.Format("{0}/{1}", Host, "buying-guides"), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Top }, new Page { DomainAndPath = String.Format("{0}/{1}", Host, "finance"), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Medium } }; // article urls var articleUrls = VehicleContentService.GetAllArticleUrlsForSitemap(); contentPages.AddRange(articleUrls .Select(articleUrl => new Page { DomainAndPath = String.Format("{0}{1}", Host, articleUrl.TrimEnd(new [] { '/' })), LastModified = lastModified, ChangeFrequency = ChangeFrequency.Weekly, Priority = Priority.Low }).ToList()); pagesBySectionDict.Add(contentSection, contentPages); #endregion lock (Mutex) { _pagesBySectionDict = pagesBySectionDict; } #endregion } catch (Exception ex) { Log.Fatal(String.Format( "The SitemapService Failed during the caching process. It's likely an SeoName problem exists in the data./r/n{0}", ex.Message)); } }