2010-08-25 105 views
3

我有一个要求,指定每个项目每销售一些值。想象一下,能够单独向购物篮中的每件商品添加礼物消息。使用nopCommerce设置ProductVariantAttribute值

这是如何实现的?

我正在使用nopCommerce 1.6(对于.net 3.5兼容性)。

我添加了三个“产品属性”(目录>产品>产品属性)。创建了一个产品,并在默认的产品变体中,将三个属性添加到产品中。

这些属性是TextBox类型,我相信会允许我输入任何我喜欢的字符串值。

如何以编程方式设置这些值。从我可以告诉ShoppingCartManager.AddToCart看起来像它需要包含XML的属性作为第四个参数的字符串:

public static List<string> AddToCart(ShoppingCartTypeEnum shoppingCartType, int productVariantId, string selectedAttributes, decimal customerEnteredPrice, int quantity); 

,但我看不到任何东西,解释了XML应该如何构建。

请注意:我正在与另一个CMS进行集成,所以我没有使用标准的nopCommerce控件来显示产品。

回答

2

要手动设置产品的价值属性上的产品变型可以使用辅助方法中发现:

  • NopSolutions.NopCommerce.BusinessLogic.Products.ProductManager
  • NopSolutions.NopCommerce.BusinessLogic.Products.Attributes.ProductAttributeManager
  • NopSolutions.NopCommerce.BusinessLogic.Products.Attributes.ProductAttributeHelper
  • NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCartManager

(这假定你的项目是基于正常的n opCommerce示例网站)。

但是这个过程相当简单;我假设产品属性是nopCommerce目录中的TextBox类型。这允许任何字符串被设置为属性的值。

过程

  1. 概述获取产品变型,这是假定你已经知道产品ID和你想(如果你有一个以上的)产品的变种。
  2. 获取变体的属性。
  3. 使用ProductAttributeHelper生成属性XML字符串
  4. 将产品保存到具有这些属性的购物车。

示例代码

private bool SaveProductToBasket() 
{ 
    var product = GetTheProduct(); 
    int productId = product.ProductId; 
    var variants = ProductManager.GetProductVariantsByProductId(productId); 
    int variantId = GetDesiredVariantId(); 
    var variant = variants[variantId]; 
    var attributes = 
     ProductAttributeManager.GetProductVariantAttributesByProductVariantId(variant.ProductVariantId); 

    string data = string.Empty; 
    data = SetVariantAttribute(data, attributes, "Attribute1", value1.ToString()); 
    data = SetVariantAttribute(data, attributes, "Attribute2", value2.ToString()); 
    data = SetVariantAttribute(data, attributes, "Attributee", value3.ToString()); 

    var addToCartWarnings = 
     ShoppingCartManager.AddToCart(ShoppingCartTypeEnum.ShoppingCart, variant.ProductVariantId, data, decimal.Zero, 1); 
    if (addToCartWarnings.Count == 0) 
    { 
     return true; 
    } 

    // TODO: Bind warnings. 
    return false; 
} 

private string SetVariantAttribute(string data, ProductVariantAttributeCollection attributes, string attributeName, string value) 
{ 
    var attribute = (from a in attributes 
         where a.ProductAttribute.Name == attributeName 
         select a).First(); 

    return ProductAttributeHelper.AddProductAttribute(data, attribute, value); 
} 
2

只需添加到这个字符串。产品属性的XML如下所示...

<Attributes> 
    <ProductVariantAttribute ID="66"> 
    <ProductVariantAttributeValue> 
     <Value>484</Value> 
    </ProductVariantAttributeValue> 
    </ProductVariantAttribute> 
    <ProductVariantAttribute ID="67"> 
    <ProductVariantAttributeValue> 
     <Value>486</Value> 
    </ProductVariantAttributeValue> 
    </ProductVariantAttribute> 
</Attributes>