2010-08-25 22 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>