/// <summary>显示产品详细内容的页面 /// </summary> /// <param name="id">要显示的产品的ID</param> /// <returns>产品详细页面</returns> public ActionResult Detail(int id) { Cart cart = (User as SolemartUser).Cart; CartItem item = cart.CartItems.FirstOrDefault(c => c.ProductID == id); if (item != null) { ViewBag.CartItem = item.Amount; } else { ViewBag.CartItem = 0; } string cacheKey = string.Format("product_{0}", id); ProductDetailViewModel model = null; if (CacheUtil.Exist(cacheKey)) { model = CacheUtil.Get <ProductDetailViewModel>(cacheKey); } else { SaledProductItem saleInfo = ProductManager.GetSaledProductByID(id); ProductItem product = ProductManager.GetProductWithBrandByID(id); List <ProductImageItem> images = ProductManager.GetProductNoLogoImage(id); int commentCount = ProductManager.GetProductCommentCount(id); string remainAmountString = string.Empty; if (product.Unit == "斤") { remainAmountString = string.Format("{0}", product.StockCount - product.ReserveCount); } else { remainAmountString = string.Format("{0:d}", (int)(product.StockCount - product.ReserveCount)); } model = new ProductDetailViewModel { ProductID = id, ProductName = product.ProductName, ProductDescription = product.Description, Price = saleInfo.Price, Unit = product.Unit, Discount = saleInfo.Discount, SpecialFlag = saleInfo.SpecialFlag, RemainAmount = remainAmountString, BrandDescription = product.Brand.Description, BrandLogo = product.Brand.BrandLogo, BrandUrl = product.Brand.BrandUrl, BrandName = product.Brand.ZhName, CommentCount = commentCount, Images = images }; CacheUtil.Add <ProductDetailViewModel>(cacheKey, model, 600); } return(View(model)); }
private static int GetDefaultValuesFolderId(string strHomeDocId) { int defaultValuesFolderId = -1; string cacheDefaultValuesFolderId = string.Format("SetDefaultValuesOnNew#homeDoc:{0}#defaultValuesFolderId", strHomeDocId); if (CacheUtil.Exist(cacheDefaultValuesFolderId)) { defaultValuesFolderId = CacheUtil.Get <int>(cacheDefaultValuesFolderId); if (defaultValuesFolderId > -1) { return(defaultValuesFolderId); } } else { log.InfoFormat("Trying to find default values folder for home id: {0}", strHomeDocId); Document home = new Document(true, int.Parse(strHomeDocId)); foreach (Document child in home.Children) { log.InfoFormat("Test to see if we have the ConfigurationContainer below home. Current ContentType.Alias: {0}", child.ContentType.Alias); if (child.ContentType.Alias == ConfigurationManager.DocumentTypeAliases.ConfigurationContainer.Value) { foreach (Document grandChild in child.Children) { log.InfoFormat("Test to see if we have the {1} below the ConfigurationContainer. Current ContentType.Alias: {0}", grandChild.ContentType.Alias, ConfigurationManager.DocumentTypeAliases.ConfigurationDefaultValuesContainer.Value); if (grandChild.ContentType.Alias == ConfigurationManager.DocumentTypeAliases.ConfigurationDefaultValuesContainer.Value) { log.InfoFormat("We have found the default values folder id: {0}", grandChild.Id); defaultValuesFolderId = grandChild.Id; CacheUtil.Insert(cacheDefaultValuesFolderId, defaultValuesFolderId, 10, false); return(defaultValuesFolderId); } } } } } return(defaultValuesFolderId); }
public static void SetDefaultValuesOnNew(Document newDocument, umbraco.cms.businesslogic.NewEventArgs e) { log.Info("SetDefaultValuesOnNew Startet"); log.InfoFormat("Document id: {1} - Document Type Alias: {0}", newDocument.ContentType.Alias, newDocument.Id); // We wrap it in a try since this part should not break for the user in umbraco try { string path = newDocument.Path; if (string.IsNullOrEmpty(path)) { StopWithError("Path on new document not found!"); return; } string[] strings = StringUtil.Split(path, ",", true); string strHomeDocId = strings[1]; // Now we have the doc home id, lets see if the default value document based on document type alias exists string cacheKeyDefaultValueDocumentTypeAlias = string.Format("SetDefaultValuesOnNew#homeDoc:{0}#DefaultValueDocumentTypeAlias:{1}", strHomeDocId, newDocument.ContentType.Alias); int defaultValueDocId = -1; if (CacheUtil.Exist(cacheKeyDefaultValueDocumentTypeAlias)) { defaultValueDocId = CacheUtil.Get <int>(cacheKeyDefaultValueDocumentTypeAlias); } else { // Does not exist in the cache, lets try to look it up int defaultValuesFolderDocId = GetDefaultValuesFolderId(strHomeDocId); if (defaultValuesFolderDocId == -1) { StopWithError("Could not load default values folder id!"); return; } // For speed we use the published node factory Node node = UmbracoUtil.GetNode(defaultValuesFolderDocId); if (node == null) { StopWithError(string.Format("Could not load published node for default values folder id: {0}!", defaultValuesFolderDocId)); return; } Node defaultValueNode = node.GetDescendantViaDocumentTypePath(newDocument.ContentType.Alias); if (defaultValueNode != null) { defaultValueDocId = defaultValueNode.Id; CacheUtil.Insert(cacheKeyDefaultValueDocumentTypeAlias, defaultValueDocId, 10, false); } else { log.DebugFormat("No default node for document type alias: {0}", newDocument.ContentType.Alias); } } if (defaultValueDocId > -1) { Document defaultValueDocument = new Document(true, defaultValueDocId); log.DebugFormat("ContentType {0} match. Let's start copying", newDocument.ContentType.Alias); umbraco.cms.businesslogic.property.Properties newDocumentProperties = newDocument.GenericProperties; umbraco.cms.businesslogic.property.Properties defaultValueProperties = defaultValueDocument.GenericProperties; for (int i = 0; i < newDocumentProperties.Count; i++) { umbraco.cms.businesslogic.property.Property newDocumentProperty = newDocumentProperties[i]; umbraco.cms.businesslogic.property.Property defaultDocumentProperty = defaultValueProperties[i]; if (newDocumentProperty.Value != defaultDocumentProperty.Value) { log.DebugFormat("Set value on property alias {0}", newDocumentProperty.PropertyType.Alias); newDocumentProperty.Value = defaultDocumentProperty.Value; } } } log.Info("SetDefaultValuesOnNew Ended"); } catch (Exception ex) { log.Error("Could not complete SetDefaultValuesOnNew - stopped with exception", ex); } }