3

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

如何做到这一点?

我正在使用 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 控件来显示产品。

4

2 回答 2

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. 使用这些属性将产品保存到购物车。

示例代码

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);
}
于 2010-08-25T21:18:33.087 回答
2

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

<Attributes>
  <ProductVariantAttribute ID="66">
    <ProductVariantAttributeValue>
      <Value>484</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="67">
    <ProductVariantAttributeValue>
      <Value>486</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
</Attributes>
于 2010-08-30T20:14:27.357 回答