我对 Kentico 还很陌生,我不是 100% 确定如何防止产品选项显示在前端网站上,但在后端保持启用,以便系统管理员仍然可以使用该选项下订单。
例如
CMSDesk > 工具 > 电子商务 > 产品选项 > 编辑具有子选项的选项
例如,有三个子选项,其中两个我想在网站上显示给用户,但只有一个我想对最终用户隐藏,并且只允许管理员访问该选项...
以前有没有人需要这个功能?如果是这样,您是如何实现的?
谢谢
米歇尔
我对 Kentico 还很陌生,我不是 100% 确定如何防止产品选项显示在前端网站上,但在后端保持启用,以便系统管理员仍然可以使用该选项下订单。
例如
CMSDesk > 工具 > 电子商务 > 产品选项 > 编辑具有子选项的选项
例如,有三个子选项,其中两个我想在网站上显示给用户,但只有一个我想对最终用户隐藏,并且只允许管理员访问该选项...
以前有没有人需要这个功能?如果是这样,您是如何实现的?
谢谢
米歇尔
请在我们的官方 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);
}
}
}
您还可以在产品选项表中添加一个自定义字段,以指示该字段是否应显示在实时站点上。