我们在产品页面上有自定义字段和非自定义字段以及数千种产品(约250,000多种产品)。有关产品的信息包含仓库和仅属性类型信息等内容。当我查看购物车中的商品时,我无法访问任何这些自定义字段。
我尝试了显而易见的printf("1\n");
,它返回ShoppingCart.CartItems[0].GetValue("Warehouse")
。我还尝试了null
,它也会返回ShoppingCart.CartItems[0].SKU.GetValue("Warehouse")
。
当我转到Pages应用程序然后转到产品页面,然后到表单选项卡,我可以看到所有SKU字段和我的自定义字段。
答案 0 :(得分:1)
的自定义字段
ShoppingCartItemInfo
不可用,因为它们存储在不同的(耦合)表中。例如,您可以在购物车中使用不同类型的产品(移动设备,笔记本电脑,键盘......),默认情况下自定义字段未加载。
您可以使用以下代码获取自定义字段:
string culture = "en-US";
var tree = new TreeProvider(MembershipContext.AuthenticatedUser);
foreach (var shoppingCartItem in ECommerceContext.CurrentShoppingCart.CartItems)
{
// we need to get class name of item in shopping cart
var productWithClassName = tree.SelectNodes()
.Where("NodeSKUID", QueryOperator.Equals, shoppingCartItem.SKUID)
.And()
.Where("DocumentCulture", QueryOperator.Equals, culture)
.Take(1)
.FirstOrDefault();
if (productWithClassName != null)
{
var product = tree.SelectSingleNode(productWithClassName.NodeID, culture);
if (product != null)
{
var customField = product.GetStringValue("CustomField", "-");
}
}
}
正如您所看到的那样,它有点复杂,因为为了让您访问自定义字段,您需要获得与产品关联的节点,然后您需要获取此节点的耦合数据。
旁注 - 建议不要在Kentico 8中存储250k文档,因为实际上内容树的大小有一些限制。根据经验,建议在Kentico 8中使用100k文档,在单个节点下最多使用1 000个直接子文档。
很可能您会遇到如此大量产品的性能问题。如果你不能重新构造内容(=自定义类或自定义表),那么一定要非常积极地使用缓存。
答案 1 :(得分:0)
你想用它的地方?
如果在静态文本或K#中,这对我有效:
EcommerceContext.CurrentShoppingCart.ShoppingCartItems[0].SKU.CustomFieldName
CMSCheckoutWebPart中的c#与您的作品类似的功能:
ShoppingCart.CartItems.FirstOrDefault().SKU.GetValue<string>("CustomFieldName","")