【问题标题】:Access the custom fields of the product from a SKUInfo object within ShoppingCart从 ShoppingCart 中的 SKUInfo 对象访问产品的自定义字段
【发布时间】:2016-06-13 03:35:49
【问题描述】:

我们在产品页面和数千种产品(大约 250,000 多种产品)上有自定义字段和非自定义字段。有关产品的信息包含诸如仓库之类的内容,并且仅包含属性类型信息。当我查看购物车中的商品时,我无法访问任何这些自定义字段。

我已经尝试了明显的ShoppingCart.CartItems[0].GetValue("Warehouse"),它返回null。我还尝试了ShoppingCart.CartItems[0].SKU.GetValue("Warehouse"),它也返回null

当我进入页面应用程序,然后进入产品页面,然后进入表单选项卡时,我可以看到显示的所有 SKU 字段和我的自定义字段。

【问题讨论】:

  • 您运行的是什么版本的 Kentico 和修补程序?
  • 哎呀抱歉 8.2,不确定是否有修补程序,但修补程序不应添加功能

标签: c# e-commerce kentico


【解决方案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 个文档 + 单个节点下最多有 1000 个直接子文档。

您很可能会在使用如此庞大的产品群时遇到性能问题。如果您无法重构内容(= 自定义类或自定义表),请务必非常积极地使用缓存。

【讨论】:

  • ShoppingCartItemInfo 不包含自定义字段,但 SKUInfo 包含它。 SKUInfo 是属性 od ShoppingCartItemInfo。如果字段在 SKU Info 类中(如我的示例中),是否可以通过示例中的方法访问,否则否。
  • Neshi 阅读问题,自定义字段在产品而不是 SKU 上。 (我真的不知道为什么 Kentico 还是把它们分开处理,很蹩脚)而且绝对不能从 SKU 对象或 SKUInfo 对象中获得。
  • Enn,为什么要指定文化?产品与文化无关。
  • 请注意您对性能的评论,是的,即使使用少数产品,性能也很糟糕。我开始后悔我决定使用 Kentico。看起来我不能使用任何内置的产品/购物车功能,必须自己动手,然后对所有内容使用自定义 Web 部件。
  • 嘿,您可以拥有几乎任意数量的产品,但它们需要是独立的产品(没有页面表示)。这意味着您不单独存储自定义字段,而是作为 Sku 的一部分,或者您将手动将它们链接到存储在自定义类中的记录。由于所有版本控制、wowkflow、发布等的性质,文档可能会受到如此多产品的限制。附言。我指定了文化代码,因为产品可以翻译,并且默认情况下它们的行为就像任何其他具有文化的页面一样。
【解决方案2】:

你想在哪里使用它?

如果在静态文本或 K# 中,这对我有用:

EcommerceContext.CurrentShoppingCart.ShoppingCartItems[0].SKU.CustomFieldName

在c#中的CMSCheckoutWebPart功能与你的作品类似:

ShoppingCart.CartItems.FirstOrDefault().SKU.GetValue<string>("CustomFieldName","")

【讨论】:

  • 这个版本可能是 9,如果您阅读我的问题,您会注意到我提到它已经不起作用了
猜你喜欢
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 2019-06-25
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多