0

我对 Kentico 还很陌生,我不是 100% 确定如何防止产品选项显示在前端网站上,但在后端保持启用,以便系统管理员仍然可以使用该选项下订单。

例如

CMSDesk > 工具 > 电子商务 > 产品选项 > 编辑具有子选项的选项

例如,有三个子选项,其中两个我想在网站上显示给用户,但只有一个我想对最终用户隐藏,并且只允许管理员访问该选项...

以前有没有人需要这个功能?如果是这样,您是如何实现的?

谢谢

米歇尔

4

1 回答 1

0

请在我们的官方 Kentico 论坛上找到我的答案:

[论坛链接][1]

我们的论坛比stackoverflow更经常被监控,所以我建议在那里继续我们的讨论;)

问候,鲍里斯,肯蒂科


更新:

如果链接应该失效,这里是完整的答案:

遗憾的是,这不能开箱即用。您将不得不自定义显示选项的控件。您需要修改以下方法:

加载产品选项()

在文件 \CMSModules\Ecommerce\Controls\ProductOptions\ShoppingCartItemSelector.ascx.cs 中。在实时站点上加载并显示了产品选项。您必须检查当前用户是否是全局管理员,如果不是,则跳过某些字段的处理。第二种方法是通过使用自定义电子商务处理程序覆盖 OptionCategoryInfoProvider.GetSKUOptionCategories 方法来更改它。可以在以下链接下找到有关此主题的更多信息:

相关链接可以在论坛帖子中找到,因为我不能在帖子中发布超过 2 个链接。

以下是提供者对象覆盖的示例:

using System;
using System.Collections.Generic;
using System.Web;

using CMS.WorkflowEngine;
using CMS.SettingsProvider;
using CMS.Ecommerce;
using CMS.EcommerceProvider;

/// <summary>
/// Summary description for Class1
/// </summary>
[MyHandlers]
public partial class CMSModuleLoader {
    private class MyHandlers: CMSLoaderAttribute {

        public override void Init() {
            OrderInfoProvider.ProviderObject = new MyEcommerceCustomHandler();

            WorkflowEvents.Approve.After += WorkflowEvents_Publish_Handler;
        }

        private static void WorkflowEvents_Publish_Handler(object sender, EventArgs e) {
            //insert custom code here
        }
    }

    public class MyEcommerceCustomHandler: OrderInfoProvider {
        protected override string GetInvoiceInternal(int orderId) {
            return base.GetInvoiceInternal(orderId);
        }
    }
}

您还可以在产品选项表中添加一个自定义字段,以指示该字段是否应显示在实时站点上。

于 2012-09-14T15:05:54.373 回答