コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }