我需要为每件商品指定一些值。想象一下,能够单独为购物篮中的每件商品添加礼品信息。
如何实现这一目标?
我正在使用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控件来显示产品。
答案 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类型。这允许将任何字符串设置为属性的值。
流程概述
示例代码
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>