public void Process(StringBuilder output, MerchantTribe.Commerce.MerchantTribeApplication app, dynamic viewBag, ITagProvider tagProvider, ParsedTag tag, string innerContents) { var profiler = MiniProfiler.Current; bool showPagers = false; int columns = 3; var model = new ProductListViewModel(); using (profiler.Step("Attribute Gathering")) { model.PagerData.PageSize = tag.GetSafeAttributeAsInteger("pagesize"); if (model.PagerData.PageSize < 1) { model.PagerData.PageSize = 9; } columns = tag.GetSafeAttributeAsInteger("columns"); if (columns < 1) { columns = 3; } if (tag.GetSafeAttribute("page") == "all") { model.PagerData.CurrentPage = WebAppSettings.ViewAllPagesConstant; } else { model.PagerData.CurrentPage = tag.GetSafeAttributeAsInteger("page"); } if (model.PagerData.CurrentPage < 1 && model.PagerData.CurrentPage != WebAppSettings.ViewAllPagesConstant) { model.PagerData.CurrentPage = GetPageFromRequest(app); } model.PagerData.TotalItems = 0; showPagers = tag.GetSafeAttributeAsBoolean("showpager"); } string source = tag.GetSafeAttribute("source"); switch (source.Trim().ToLowerInvariant()) { case "featured": model.Items = app.CatalogServices.Products.FindFeatured(1, model.PagerData.PageSize); showPagers = false; break; case "manual": string manualProducts = tag.GetSafeAttribute("products"); List <string> bvins = manualProducts.Split(',').ToList(); model.Items = app.CatalogServices.Products.FindMany(bvins); string manualSkus = tag.GetSafeAttribute("skus"); List <string> skus = manualSkus.Split(',').ToList(); model.Items.AddRange(app.CatalogServices.Products.FindManySkus(skus)); showPagers = false; break; default: using (profiler.Step("Pull Products for Category")) { var cat = app.CurrentRequestContext.CurrentCategory; string categoryId = tag.GetSafeAttribute("categoryid"); using (profiler.Step("Checking for non-current category on grid")) { if (categoryId.Trim().Length < 1 || categoryId.Trim().ToLowerInvariant() == "current") { if (app.CurrentRequestContext.CurrentCategory != null) { categoryId = app.CurrentRequestContext.CurrentCategory.Bvin; cat = app.CatalogServices.Categories.Find(categoryId); } } } using (profiler.Step("Build Data for Render")) { int totalItems = 0; using (profiler.Step("Get the Products")) { // View All Support if (model.PagerData.CurrentPage == WebAppSettings.ViewAllPagesConstant) { model.PagerData.CurrentPage = 1; model.PagerData.PageSize = 250; // int.MaxValue; - Use a reasonable limit here instead of max int. } model.Items = app.CatalogServices.FindProductForCategoryWithSort( categoryId, CategorySortOrder.ManualOrder, false, model.PagerData.CurrentPage, model.PagerData.PageSize, ref totalItems); model.PagerData.TotalItems = totalItems; } using (profiler.Step("Build the Pager Urls")) { model.PagerData.PagerUrlFormat = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat), app.CurrentRequestContext.RoutingContext, "{0}"); model.PagerData.PagerUrlFormatFirst = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat), app.CurrentRequestContext.RoutingContext); } } } break; } Render(output, app, viewBag, model, showPagers, columns); }
public void Process(StringBuilder output, MerchantTribe.Commerce.MerchantTribeApplication app, dynamic viewBag, ITagProvider tagProvider, ParsedTag tag, string innerContents) { var profiler = MiniProfiler.Current; bool showPagers = false; int columns = 3; var model = new ProductListViewModel(); using (profiler.Step("Attribute Gathering")) { model.PagerData.PageSize = tag.GetSafeAttributeAsInteger("pagesize"); if (model.PagerData.PageSize < 1) model.PagerData.PageSize = 9; columns = tag.GetSafeAttributeAsInteger("columns"); if (columns < 1) columns = 3; if (tag.GetSafeAttribute("page") == "all") { model.PagerData.CurrentPage = WebAppSettings.ViewAllPagesConstant; } else { model.PagerData.CurrentPage = tag.GetSafeAttributeAsInteger("page"); } if (model.PagerData.CurrentPage < 1 && model.PagerData.CurrentPage != WebAppSettings.ViewAllPagesConstant) { model.PagerData.CurrentPage = GetPageFromRequest(app); } model.PagerData.TotalItems = 0; showPagers = tag.GetSafeAttributeAsBoolean("showpager"); } string source = tag.GetSafeAttribute("source"); switch (source.Trim().ToLowerInvariant()) { case "featured": model.Items = app.CatalogServices.Products.FindFeatured(1, model.PagerData.PageSize); showPagers = false; break; case "manual": string manualProducts = tag.GetSafeAttribute("products"); List<string> bvins = manualProducts.Split(',').ToList(); model.Items = app.CatalogServices.Products.FindMany(bvins); string manualSkus = tag.GetSafeAttribute("skus"); List<string> skus = manualSkus.Split(',').ToList(); model.Items.AddRange(app.CatalogServices.Products.FindManySkus(skus)); showPagers = false; break; default: using (profiler.Step("Pull Products for Category")) { var cat = app.CurrentRequestContext.CurrentCategory; string categoryId = tag.GetSafeAttribute("categoryid"); using (profiler.Step("Checking for non-current category on grid")) { if (categoryId.Trim().Length < 1 || categoryId.Trim().ToLowerInvariant() == "current") { if (app.CurrentRequestContext.CurrentCategory != null) { categoryId = app.CurrentRequestContext.CurrentCategory.Bvin; cat = app.CatalogServices.Categories.Find(categoryId); } } } using (profiler.Step("Build Data for Render")) { int totalItems = 0; using (profiler.Step("Get the Products")) { // View All Support if (model.PagerData.CurrentPage == WebAppSettings.ViewAllPagesConstant) { model.PagerData.CurrentPage = 1; model.PagerData.PageSize = 250; // int.MaxValue; - Use a reasonable limit here instead of max int. } model.Items = app.CatalogServices.FindProductForCategoryWithSort( categoryId, CategorySortOrder.ManualOrder, false, model.PagerData.CurrentPage, model.PagerData.PageSize, ref totalItems); model.PagerData.TotalItems = totalItems; } using (profiler.Step("Build the Pager Urls")) { model.PagerData.PagerUrlFormat = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat), app.CurrentRequestContext.RoutingContext, "{0}"); model.PagerData.PagerUrlFormatFirst = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat), app.CurrentRequestContext.RoutingContext); } } } break; } Render(output, app, viewBag, model, showPagers, columns); }