使用nopCommerce设置ProductVariantAttribute值

时间:2010-08-25 12:06:24

标签: nopcommerce

我需要为每件商品指定一些值。想象一下,能够单独为购物篮中的每件商品添加礼品信息。

如何实现这一目标?

我正在使用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 个答案:

答案 0 :(得分:2)

要在产品变体上手动设置产品属性的值,您可以使用以下中的辅助方法:

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

(这假设您的项目基于正常的nopCommerce示例站点。)

然而,这个过程相当直接;我假设产品属性在nopCommerce目录中是TextBox类型。这允许将任何字符串设置为属性的值。

流程概述

  1. 获取产品变体,假设您已经知道产品ID以及您想要的产品变体(如果您有多个)。
  2. 获取变体的属性。
  3. 使用ProductAttributeHelper生成属性XML字符串
  4. 使用这些属性将产品保存到购物车。
  5. 示例代码

    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);
    }
    

答案 1 :(得分:2)

只需添加到此字符串即可。产品属性的XML看起来像这样......

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