【问题标题】:Hide a product in Kentico 10在 Kentico 10 中隐藏产品
【发布时间】:2017-02-16 22:40:24
【问题描述】:

我在 kentico 10 中对电子商务网站的产品执行 CRUD 操作。我可以使用以下 API 添加和更新产品

SKUInfoProvider.SetSKUInfo(updateProduct);

还有一个删除产品的API

SKUInfoProvider.DeleteSKUInfo(updateProduct);

但我不想从数据库中删除产品,而只是禁用它们,这样它们就不会显示给最终用户并仍然留在数据库中。

我尝试将 SKUEnabled 设置为 false,但用户仍然可以看到产品。所以,我使用下面的代码来隐藏产品

ProductNode.SetValue("DocumentPublishTo", DateTime.Now.AddDays(-1));

但我的代码设置添加了具有上述禁用属性的新产品。这是我的代码

 foreach (DataRow dr in dt.Rows)
        {                
            manufacturer = GetManufacturer(Convert.ToString(dr["MANUFACTURER_NAME"]));
            department = GetDepartment(Convert.ToString(dr["CATEGORY_OF_PRODUCT_1"]));

            var sku = new SKUInfo
            {
                SKUNumber = Convert.ToString(dr["MANUFACTURER_PART_NUMBER"]),
                SKUName = Convert.ToString(dr["MANUFACTURER_PART_NUMBER"]),
                SKUDescription = Convert.ToString(dr["TECHNICAL_SPECIFICATIONS"]).Trim('"'),
                SKUShortDescription = Convert.ToString(dr["SHORT_DESCRIPTION"]).Trim('"'),
                SKUPrice = ValidationHelper.GetDouble(dr["RESELLER_BUY_INC"], 0),
                SKURetailPrice = ValidationHelper.GetDouble(dr["RRP_INC"], 0),
                SKUEnabled = false,
                SKUSiteID = siteId,
                SKUProductType = SKUProductTypeEnum.Product,
                SKUManufacturerID = manufacturer.ManufacturerID,
                SKUDepartmentID = department.DepartmentID,
                SKUHeight = ValidationHelper.GetDouble(dr["HEIGHT"], 0),
                SKUWidth = ValidationHelper.GetDouble(dr["WIDTH"], 0),
                SKUWeight = ValidationHelper.GetDouble(dr["WEIGHT"], 0),
                SKUDepth = ValidationHelper.GetDouble(dr["LENGTH"], 0),
                SKUAvailableItems = 1,
                SKUSellOnlyAvailable = true
            };

            try
            {

                SKUInfo updateProduct = SKUInfoProvider.GetSKUs()
                                .WhereEquals("SKUNumber", sku.SKUNumber)
                                .FirstObject;

                sku.SKUPrice += sku.SKUPrice * 0.015;


                if (updateProduct != null)
                {
                    updateProduct.SKUNumber = sku.SKUNumber; updateProduct.SKUName = sku.SKUName;
                    SKUInfoProvider.SetSKUInfo(updateProduct);
                }

                else
                {
                    SKUInfoProvider.SetSKUInfo(sku);
                }

                if (!sku.SKUEnabled)
                {
                    SKUTreeNode productDoc = (SKUTreeNode)SKUTreeNode.New(productDocumentType.ClassName, tree);
                    if (sku.SKUEnabled == false)
                    {
                        productDoc.DocumentPublishTo = DateTime.Now.AddDays(-1);
                    }

                    productDoc.DocumentSKUName = Convert.ToString(dr["MANUFACTURER_PART_NUMBER"]);
                    productDoc.DocumentSKUDescription = sku.SKUDescription;
                    productDoc.NodeSKUID = sku.SKUID;
                    productDoc.DocumentCulture = cultureCode;
                    productDoc.DocumentName = Convert.ToString(dr["MANUFACTURER_PART_NUMBER"]);

                }
            }                

            catch (Exception ex)
            {
                error += "error";
            }

        }

请提供可能的解决方案。SKUInfo 中没有 DocumentPublishTo 等属性,因此我将它与 SKUTreeNode 一起使用,您可以在代码设置中找到它。

  SKUTreeNode productDoc = (SKUTreeNode)SKUTreeNode.New(productDocumentType.ClassName, tree);
                if (sku.SKUEnabled == false)
                {
                    productDoc.DocumentPublishTo = DateTime.Now.AddDays(-1);
                }

【问题讨论】:

  • 当您不想要新产品时,为什么要调用 (SKUTreeNode)SKUTreeNode.New()?我会将其设置为 updateProduct 对象。
  • SKUInfo中没有DocumentPublishTo等属性,所以在SKUTreeNode中使用。

标签: kentico


【解决方案1】:

您需要获取 SKU 的节点,而不是创建新节点。来自documentation

    SKUTreeNode productDoc = (SKUTreeNode)tree.SelectNodes()
        .Path("/Products/NewProduct")
        .OnCurrentSite()
        .CombineWithDefaultCulture()
        .FirstObject;
productDoc.DocumentPublishTo = DateTime.Now.AddDays(-1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多