Esempio n. 1
0
        public ActionResult Index(string q)
        {
            // Initial Setup
            ViewBag.Title = SiteTerms.GetTerm(SiteTermIds.Search);
            ViewBag.MetaTitle = ViewBag.Title + " | " + q;
            ViewBag.MetaDescription = ViewBag.MetaTitle;
            ViewBag.BodyClass = "store-search-page";
            ViewBag.GoButtonUrl = MTApp.ThemeManager().ButtonUrl("Go", Request.IsSecureConnection);
            ViewBag.q = q;

            // Pager Vars
            int pageNumber = GetPageNumber();
            int pageSize = 9;
            int totalItems = 0;

            // Do Search
            CategoryPageViewModel model = new CategoryPageViewModel();
            SearchManager manager = new SearchManager();
            List<SearchObject> objects = manager.DoSearch(MTApp.CurrentStore.Id, 
                                                        q, pageNumber, 
                                                        pageSize, ref totalItems);
            List<string> ids = new List<string>();
            foreach (SearchObject o in objects)
            {
                switch (o.ObjectType)
                {
                    case (int)SearchManagerObjectType.Product:
                        ids.Add(o.ObjectId);
                        break;
                }
            }
            List<Product> products = MTApp.CatalogServices.Products.FindMany(ids);

            // Save to Model
            model.Products = PrepProducts(products);            
            model.PagerData.PageSize = pageSize;
            model.PagerData.TotalItems = totalItems;
            model.PagerData.CurrentPage = pageNumber;
            model.PagerData.PagerUrlFormat = Url.Content("~/search?q=" + HttpUtility.UrlEncode(q) + "&p={0}");
            model.PagerData.PagerUrlFormatFirst = Url.Content("~/search?q=" + HttpUtility.UrlEncode(q));            

            return View(model);
        }
        private void RenderSelection(StringBuilder sb, 
            int index,
            long selectedValue,
            string key,
            CategoryFacet facet,
            ProductProperty property,
            List<CategoryFacet> allFacets,
            CategoryPageViewModel model,
            List<BreadCrumbItem> extraCrumbs)
        {
            string selectedName = string.Empty;
            var sn = (from c in property.Choices
                      where c.Id == selectedValue
                      select c.ChoiceName).SingleOrDefault();
            if (sn != null)
            {
                selectedName = sn;
                extraCrumbs.Add(new BreadCrumbItem() { Name = sn });
                ViewBag.MetaDescription += " | " + sn;
                ViewBag.Title += " | " + sn;
            }
            sb.Append("<h6 class=\"filter\">" + property.DisplayName + "</h6> ");

            string baseUrl = model.LocalCategory.RewriteUrl + "?node=" + CategoryFacetKeyHelper.ClearSelfAndChildrenFromKey(key, allFacets, facet.Id);
            sb.Append("<ul class=\"filterselected\"><li>");
            sb.Append(" <a href=\"" + baseUrl + "\">");
            sb.Append(selectedName);
            sb.Append(" [clear]</a></li></ul>");
        }
        private void RenderNonSelection(StringBuilder sb, int index, long selectedValue, string key,
            CategoryFacet facet, ProductProperty property, List<ProductFacetCount> counts,
            CategoryPageViewModel model)
        {
            sb.Append("<h6 class=\"filter\">" + property.DisplayName + "</h6>");
            sb.Append("<ul class=\"filterselections\">");
            foreach (ProductPropertyChoice c in property.Choices)
            {
                string newKey = CategoryFacetKeyHelper.ReplaceKeyValue(key, index, c.Id);
                string baseUrl = model.LocalCategory.RewriteUrl + "?node=" + newKey;
                string sqlKey = CategoryFacetKeyHelper.ParseKeyToSqlList(newKey);
                ProductFacetCount fc = new ProductFacetCount();
                foreach (ProductFacetCount f in counts)
                {
                    if (f.Key == sqlKey)
                    {
                        fc = f;
                        break;
                    }
                }

                if (fc.ProductCount > 0)
                {
                    sb.Append("<li><a href=\"" + baseUrl + "\">");
                    sb.Append(c.ChoiceName);
                    sb.Append(" (" + fc.ProductCount.ToString() + ")");
                    sb.Append("</a></li>");
                }
            }
            sb.Append("</ul>");
        }
        public ActionResult DrillDownIndex(string slug)
        {
            ViewBag.BodyClass = "store-categorydrilldown-page";

            Category cat = MTApp.CatalogServices.Categories.FindBySlugForStore(slug,
                                        MTApp.CurrentRequestContext.CurrentStore.Id);
            if (cat == null) cat = new Category();

            ViewBag.Title = cat.MetaTitle;
            if (String.IsNullOrEmpty(ViewBag.Title)) { ViewBag.Title = cat.Name; }
            ViewBag.MetaKeywords = cat.MetaKeywords;
            ViewBag.MetaDescription = cat.MetaDescription;
            ViewBag.DisplayHtml = TagReplacer.ReplaceContentTags(cat.Description,
                                                                 this.MTApp,
                                                                 "",
                                                                 Request.IsSecureConnection);

            string key = Request.QueryString["node"] ?? string.Empty;
            if (key == "-") key = string.Empty;
            ViewBag.Key = key;

            int pageNumber = GetPageNumber();
            int pageSize = 9;
            int totalItems = 0;

            CategoryPageViewModel model = new CategoryPageViewModel();

            CategoryFacetManager manager = CategoryFacetManager.InstantiateForDatabase(MTApp.CurrentRequestContext);
            List<CategoryFacet> facets = manager.FindByCategory(cat.Bvin);
            List<ProductProperty> properties = LoadProperties(facets);
            if (key == string.Empty)
            {
                key = CategoryFacetKeyHelper.BuildEmptyKey(facets.Count);
            }
            List<long> parsedKey = CategoryFacetKeyHelper.ParseKeyToList(key);

            List<Product> products = MTApp.CatalogServices.FindProductsMatchingKey(key,
                                                                            pageNumber,
                                                                            pageSize,
                                                                            ref totalItems);

            List<ProductFacetCount> productCounts = manager.FindCountsOfVisibleFacets(key, facets, properties);
            List<long> visibleIds = manager.FindVisibleFacetsIdsForKey(key, facets);

            model.Products = PrepProducts(products);
            model.LocalCategory = cat;
            model.PagerData.PageSize = pageSize;
            model.PagerData.TotalItems = totalItems;
            model.PagerData.CurrentPage = pageNumber;
            model.PagerData.PagerUrlFormat = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat),
                                            MTApp.CurrentRequestContext.RoutingContext,
                                            "{0}");
            model.PagerData.PagerUrlFormatFirst = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat),
                                            MTApp.CurrentRequestContext.RoutingContext);
            model.SubCategories = PrepSubCategories(MTApp.CatalogServices.Categories.FindVisibleChildren(cat.Bvin));

            StringBuilder sbNotSelected = new StringBuilder();

            List<BreadCrumbItem> extraCrumbs = new List<BreadCrumbItem>();

            for (int i = 0; i < facets.Count; i++)
            {
                if (visibleIds.Contains(facets[i].Id))
                {
                    // Find the property that matches the facet
                    var p = (from pr in properties
                             where pr.Id == facets[i].PropertyId
                             select pr).SingleOrDefault();
                    if (p != null)
                    {
                        if (parsedKey[i] < 1)
                        {
                            // not selected
                            this.RenderNonSelection(sbNotSelected, i, parsedKey[i], key, facets[i], p, productCounts, model);
                        }
                        else
                        {
                            // selected
                            this.RenderSelection(sbNotSelected, i, parsedKey[i], key, facets[i], p, facets, model, extraCrumbs);
                        }
                    }
                }
            }

            ViewBag.ExtraCrumbs = extraCrumbs;
            ViewBag.Filters = sbNotSelected.ToString();

            // Banner
            if (cat.BannerImageUrl.Trim().Length > 0)
            {
                ViewBag.ShowBanner = true;
                ViewBag.BannerUrl = MerchantTribe.Commerce.Storage.DiskStorage.CategoryBannerUrl(
                                        MTApp,
                                        cat.Bvin,
                                        cat.BannerImageUrl,
                                        Request.IsSecureConnection);
            }
            else
            {
                ViewBag.ShowBanner = false;
            }

            // Record Category View
            MerchantTribe.Commerce.SessionManager.CategoryLastId = cat.Bvin;

            return View("DrillDown", model);
        }
        public ActionResult Index(string slug)
        {
            ViewBag.BodyClass = "store-category-page";

            Category cat = MTApp.CatalogServices.Categories.FindBySlugForStore(slug,
                                        MTApp.CurrentRequestContext.CurrentStore.Id);
            if (cat == null) cat = new Category();

            ViewBag.Title = cat.MetaTitle;
            if (String.IsNullOrEmpty(ViewBag.Title)) { ViewBag.Title = cat.Name; }
            ViewBag.MetaKeywords = cat.MetaKeywords;
            ViewBag.MetaDescription = cat.MetaDescription;
            ViewBag.DisplayHtml = TagReplacer.ReplaceContentTags(cat.Description,
                                                                 this.MTApp,
                                                                 "",
                                                                 Request.IsSecureConnection);

            ViewBag.AddToCartButton = this.MTApp.ThemeManager().ButtonUrl("AddToCart", Request.IsSecureConnection);
            ViewBag.DetailsButton = this.MTApp.ThemeManager().ButtonUrl("View", Request.IsSecureConnection);

            int pageNumber = GetPageNumber();
            int pageSize = 9;
            int totalItems = 0;

            CategoryPageViewModel model = new CategoryPageViewModel();
            List<Product> products = MTApp.CatalogServices.FindProductForCategoryWithSort(
                                            cat.Bvin,
                                            CategorySortOrder.ManualOrder,
                                            false,
                                            pageNumber, pageSize, ref totalItems);
            model.Products = PrepProducts(products);
            model.LocalCategory = cat;
            model.PagerData.PageSize = pageSize;
            model.PagerData.TotalItems = totalItems;
            model.PagerData.CurrentPage = pageNumber;
            model.PagerData.PagerUrlFormat = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat),
                                            MTApp.CurrentRequestContext.RoutingContext,
                                            "{0}");
            model.PagerData.PagerUrlFormatFirst = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat),
                                            MTApp.CurrentRequestContext.RoutingContext);
            model.SubCategories = PrepSubCategories(MTApp.CatalogServices.Categories.FindVisibleChildren(cat.Bvin));

            // Banner
            if (cat.BannerImageUrl.Trim().Length > 0)
            {
                ViewBag.ShowBanner = true;
                ViewBag.BannerUrl = MerchantTribe.Commerce.Storage.DiskStorage.CategoryBannerUrl(
                                        MTApp,
                                        cat.Bvin,
                                        cat.BannerImageUrl,
                                        Request.IsSecureConnection);
            }
            else
            {
                ViewBag.ShowBanner = false;
            }

            // Record Category View
            MerchantTribe.Commerce.SessionManager.CategoryLastId = cat.Bvin;
            MTApp.CurrentRequestContext.CurrentCategory = cat;

            if (cat.TemplateName == "BV Grid") cat.TemplateName = "Grid"; // Safety Check from older versions
            string viewName = cat.TemplateName.Trim();
            return View(viewName, model);
        }
        public ActionResult Index(string slug)
        {
            ViewBag.BodyClass = "store-category-page";

            Category cat = MTApp.CatalogServices.Categories.FindBySlugForStore(slug,
                                        MTApp.CurrentRequestContext.CurrentStore.Id);
            if (cat == null) cat = new Category();

            ViewBag.Title = cat.MetaTitle;
            if (String.IsNullOrEmpty(ViewBag.Title)) { ViewBag.Title = cat.Name; }
            ViewBag.MetaKeywords = cat.MetaKeywords;
            ViewBag.MetaDescription = cat.MetaDescription;
            //ViewBag.DisplayHtml = TagReplacer.ReplaceContentTags(cat.Description,
            //                                                     this.MTApp,
            //                                                     "",
            //                                                     Request.IsSecureConnection);

            //ViewBag.AddToCartButton = this.MTApp.ThemeManager().ButtonUrl("AddToCart", Request.IsSecureConnection);
            //ViewBag.DetailsButton = this.MTApp.ThemeManager().ButtonUrl("View", Request.IsSecureConnection);

            //int pageNumber = GetPageNumber();
            //int pageSize = 9;
            //int totalItems = 0;

            CategoryPageViewModel model = new CategoryPageViewModel();
            //List<Product> products = MTApp.CatalogServices.FindProductForCategoryWithSort(
            //                                cat.Bvin,
            //                                CategorySortOrder.ManualOrder,
            //                                false,
            //                                pageNumber, pageSize, ref totalItems);
            //model.Products = PrepProducts(products);
            //model.LocalCategory = cat;
            //model.PagerData.PageSize = pageSize;
            //model.PagerData.TotalItems = totalItems;
            //model.PagerData.CurrentPage = pageNumber;
            //model.PagerData.PagerUrlFormat = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat),
            //                                MTApp.CurrentRequestContext.RoutingContext,
            //                                "{0}");
            //model.PagerData.PagerUrlFormatFirst = UrlRewriter.BuildUrlForCategory(new CategorySnapshot(cat),
            //                                MTApp.CurrentRequestContext.RoutingContext);
            model.SubCategories = PrepSubCategories(MTApp.CatalogServices.Categories.FindVisibleChildren(cat.Bvin));

            // Banner
            //if (cat.BannerImageUrl.Trim().Length > 0)
            //{
            //    ViewBag.ShowBanner = true;
            //    ViewBag.BannerUrl = MerchantTribe.Commerce.Storage.DiskStorage.CategoryBannerUrl(
            //                            MTApp,
            //                            cat.Bvin,
            //                            cat.BannerImageUrl,
            //                            Request.IsSecureConnection);
            //}
            //else
            //{
            //    ViewBag.ShowBanner = false;
            //}

            // Record Category View
            MerchantTribe.Commerce.SessionManager.CategoryLastId = cat.Bvin;
            MTApp.CurrentRequestContext.CurrentCategory = cat;

            // Render Bread Crumbs
            //var breadRender = new code.TemplateEngine.TagHandlers.BreadCrumbs();
            //ViewBag.BreadCrumbsFinal = breadRender.RenderCategory(MTApp, new List<BreadCrumbItem>(), cat);

            // Render Columns
            //var columnRender = new code.TemplateEngine.TagHandlers.ContentColumn();
            //model.LeftColumn = columnRender.RenderColumnToString("4", MTApp, ViewBag);
            //model.PreColumn = columnRender.RenderColumnToString(cat.PreContentColumnId, MTApp, ViewBag);
            //model.PostColumn = columnRender.RenderColumnToString(cat.PostContentColumnId, MTApp, ViewBag);

            if (cat.TemplateName == "BV Grid") cat.TemplateName = "Grid"; // Safety Check from older versions
            string viewName = cat.TemplateName.Trim();

            if (viewName.Trim().ToLowerInvariant() == "grid")
            {
                ThemeManager tm = MTApp.ThemeManager();
                string template = tm.GetTemplateFromCurrentTheme("category-grid.html");
                ITagProvider tagProvider = new TagProvider();
                Processor proc = new Processor(this.MTApp, this.ViewBag, template, tagProvider);
                StringBuilder output = new StringBuilder();
                proc.RenderForDisplay(output);
                return Content(output.ToString());
            }
            else
            {
                return View(viewName, model);
            }
        }