【问题标题】:Set ProductVariantAttribute value with nopCommerce使用 nopCommerce 设置 ProductVariantAttribute 值
【发布时间】:2010-08-25 12:06:23
【问题描述】:

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

如何做到这一点?

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

【问题讨论】:

    标签: nopcommerce


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-10-15
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 2020-09-17
        • 2015-08-26
        • 1970-01-01
        相关资源
        最近更新 更多