东莞市连易网络科技有限公司
东莞市连易网络科技有限公司
  • 网站
  • 用户
  • 购物车
  • 购物车
  • 搜索
  • 网站
  • 用户
帮助
帮助
开发文档 公开配置选项
  • 用户文档
  • 开发文档
  • API文档
  • 提及
  • 标签
  • 更多
  • 取消
  • 新建
  • +开始
  • +UI 自定义
  • +外部集成
  • -插件/框架扩展
    • -插件
      • 异常和日志记录
      • 插件生命周期
      • -插件示例
        • 使用小组件从插件渲染内容
        • 公开数据给外部源
        • 公开配置选项
        • 创建动态
        • +创建自定义应用程序和内容
        • 基于模板的电子邮件
        • 处理事件
        • 处理内容中的嵌入文件
        • 定义权限
        • 扩展规则支持
        • 文件交互
        • 文件查看器
        • 注册模板令牌
        • 管理依赖关系
        • 管理物理文件存储
        • 翻译插件文本
        • 通知
    • +设置开发环境
    • +进程 API

公开配置选项

插件可以选择公开平台在管理界面中显示的配置选项。

何时应公开配置选项?

在开发基于配置值(例如,全局选项或身份验证详细信息)的插件时,您可以实现可配置的插件,以便通过管理界面轻松公开这些选项。

创建可配置的插件

要向现有插件添加配置选项,插件必须实现 IConfigurablePlugin 接口。IConfigurablePlugin 接口在 Limyee.Components.dll 的 Limyee.Extensibility.Version1 命名空间中定义。IConfigurablePlugin 接口有两个成员:要公开的配置选项由 ConfigurationOptions 属性标识,当前配置数据将提供给 Update 方法。配置选项是使用 Dynamic Configuration 定义的,它是与小组件共享实现,可以基于元数据自动生成表单。示例如下:

using Limyee.DynamicConfiguration.Components;
using Limyee.Extensibility.Version1;

namespace Samples
{
	public class SampleConfigurablePlugin : IConfigurablePlugin
	{
		private IPluginConfiguration _configuration;

		#region IPlugin
		public string Name => "可配置插件示例";
		public string Description => "";
		public void Initialize() { }
		#endregion

		#region IConfigurablePlugin
		public PropertyGroup[] ConfigurationOptions
		{
			get
			{
				var group = new PropertyGroup("options", "选项", 0);

				var stringProperty = new Property("stringProperty", "字符串属性示例", PropertyType.String, 0, "这是默认值")
				{
					DescriptionText = "字符串属性描述示例"
				};
				group.Properties.Add(stringProperty);

				var selectableProperty = new Property("selectableProperty", "可选属性示例", PropertyType.String, 1, "One")
				{
					DescriptionText = "可选属性描述示例"
				};
				selectableProperty.SelectableValues.Add(new PropertyValue("One", "选择一", 1));
				selectableProperty.SelectableValues.Add(new PropertyValue("Two", "选择二", 2));
				selectableProperty.SelectableValues.Add(new PropertyValue("Three", "选择三", 3));
				selectableProperty.SelectableValues.Add(new PropertyValue("Four", "选择四", 4));
				group.Properties.Add(selectableProperty);

				return new[] { group };
			}
		}

        public void Update(IPluginConfiguration configuration)
		{
			_configuration = configuration;
		}
		#endregion
	}
}

在此示例中,将两个属性添加到配置选项定义名为“选项”的组中。第一个属性称为“字符串属性示例”,表示一个字符串值。第二个属性“可选属性示例”也是一个字符串值,但它定义了可选选项,这些选项将此字段显示为下拉列表。在管理界面中部署和查看此插件时,它将显示为:

Update 方法根据 ConfigurationOptions 定义的元数据接收插件的配置数据。然后,该插件可以读取和使用此配置数据,来适合实现其行为。IPluginConfiguration 的 Update 方法提供了包括获取和设置插件配置值的方法。例如,要读取示例定义的第一个字符串属性的当前值,插件将调用:

var stringValue = _configuration.GetString("stringProperty");

定义配置元数据时,将使用 Limyee.DynamicConfiguration.DynamicConfiguration.dll 中 Limyee.DynamicConfiguration.Components 命名空间中的项。这些包括:

  • PropertyGroup:表示 Limyee 电商平台管理界面中的选项卡。
  • PropertySubGroup:表示管理界面中组字段的子分组。
  • Property。属性存在于组或子分组中,并用名称和描述表示单个值。该平台将使用默认界面实现自动显示所有属性(类型“Custom”除外)。通过将 ControlType 属性设置为实现 IPropertyControl 的类,可以自定义属性值编辑器。下面列出了平台中的可用属性控件。
  • PropertyValue。属性值存在于属性中,用于为属性定义的可选选项。默认情况下,在属性上定义一个或多个属性值将导致该属性显示为下拉列表。
  • PropertyRule。可以在属性上定义规则,通过引用规则实现(即实现 IPropertyRule 接口的类)来自动执行值约束。

可用的属性控件

当使用动态配置属性实例定义配置元数据时,Limyee 电商平台将为除自定义之外的每种数据类型显示默认编辑器。若要自定义值编辑器的显示,可以将属性的 ControlType 属性设置为实现 IPropertyControl 的类的类型。Limyee 电商平台包括一些可由插件和小组件使用的属性控件:

  • 博客选择自定义控件
  • 复选框列表字符串控件
  • 自定义导航自定义控件
  • 电子邮件字符串控件
  • 论坛选择自定义控件
  • 论坛可排序列表控件
  • 群组或应用程序选择自定义控件
  • 群组选择自定义控件
  • 媒体库选择自定义控件
  • 属性可见性选择控件
  • 富文本编辑器 HTML 控件
  • 可排序列表自定义控件
  • 标记化字符串控件
  • 用户文件 URL 控件
  • 用户资料字段选择自定义控件
  • 用户资料组选择自定义控件
  • 百科选择自定义控件

需要配置才能启用插件

通常,插件要运行必需将配置值填上。在这些情况下,在充分指定配置之前不允许插件运行是很重要的。此方案是通过实现 Limyee.Components.dll 中定义的 IRequiredConfigurationPlugin 接口来实现的。此接口添加了一个属性 IsConfigured,平台读取该属性以确定插件在允许主动启用之前是否配置了该插件。如果启用了插件,但配置不令人满意,则该插件将在管理界面中以红色突出显示,并且不会主动启用(即不会完全初始化,因此将无法与平台交互)。基于前面的可配置插件示例的实现如下:

using Limyee.DynamicConfiguration.Components;
using Limyee.Extensibility.Version1;

namespace Samples
{
	public class SampleConfigurablePlugin : IConfigurablePlugin, IRequiredConfigurationPlugin
	{
		private IPluginConfiguration _configuration;

		#region IPlugin
		public string Name => "可配置插件示例";
		public string Description => "";
		public void Initialize() { }
		#endregion

		#region IConfigurablePlugin
		public PropertyGroup[] ConfigurationOptions
		{
			get
			{
				var group = new PropertyGroup("options", "选项", 0);

				var stringProperty = new Property("stringProperty", "字符串属性示例", PropertyType.String, 0, "这是默认值")
				{
					DescriptionText = "字符串属性描述示例"
				};
				group.Properties.Add(stringProperty);

				var selectableProperty = new Property("selectableProperty", "可选属性示例", PropertyType.String, 1, "One")
				{
					DescriptionText = "可选属性描述示例"
				};
				selectableProperty.SelectableValues.Add(new PropertyValue("One", "选择一", 1));
				selectableProperty.SelectableValues.Add(new PropertyValue("Two", "选择二", 2));
				selectableProperty.SelectableValues.Add(new PropertyValue("Three", "选择三", 3));
				selectableProperty.SelectableValues.Add(new PropertyValue("Four", "选择四", 4));
				group.Properties.Add(selectableProperty);

				return new[] { group };
			}
		}

        public void Update(IPluginConfiguration configuration)
		{
			_configuration = configuration;
		}
		#endregion

		#region IRequiredConfigurationPlugin
		public bool IsConfigured
		{
			get { return _configuration.GetString("stringProperty") == "有效"; }
		}
		#endregion
	}
}

在此示例实现中,仅当“stringProperty”配置字段的值为“有效”时,才接受配置。当插件已启用且值不为“有效”时,该插件将在列表中以红色背景显示:

当它具有有效值时,它将正常列出(并完全启用/初始化):


自定义配置界面的显示

虽然 Limyee 电商平台将实现了 IConfigurablePlugin 的插件公开其配置选项和自动生成配置表单,并处理将自定义属性控件用于单个字段的情况,但有时整个配置界面需要使用自定义布局和实现。为了能够完全覆盖配置界面,插件可以从 Limyee.Components.dll 的 Limyee.Extensibility.Version1 命名空间实现 IRenderableConfigurablePlugin 接口。此接口添加了一个方法 GetConfigurationHtml,该方法需要一个可以插入到插件编辑界面中的 HTML 结果。例如

using Limyee.DynamicConfiguration.Components;
using Limyee.Extensibility.Version1;

namespace Samples
{
	public class SampleConfigurablePlugin : IConfigurablePlugin, IRequiredConfigurationPlugin, IRenderableConfigurablePlugin
	{
		private IPluginConfiguration _configuration;

		#region IPlugin
		public string Name => "可配置插件示例";
		public string Description => "";
		public void Initialize() { }
		#endregion

		#region IConfigurablePlugin
		public PropertyGroup[] ConfigurationOptions
		{
			get
			{
				var group = new PropertyGroup("options", "选项", 0);

				var stringProperty = new Property("stringProperty", "字符串属性示例", PropertyType.String, 0, "这是默认值")
				{
					DescriptionText = "字符串属性描述示例"
				};
				group.Properties.Add(stringProperty);

				var selectableProperty = new Property("selectableProperty", "可选属性示例", PropertyType.String, 1, "One")
				{
					DescriptionText = "可选属性描述示例"
				};
				selectableProperty.SelectableValues.Add(new PropertyValue("One", "选择一", 1));
				selectableProperty.SelectableValues.Add(new PropertyValue("Two", "选择二", 2));
				selectableProperty.SelectableValues.Add(new PropertyValue("Three", "选择三", 3));
				selectableProperty.SelectableValues.Add(new PropertyValue("Four", "选择四", 4));
				group.Properties.Add(selectableProperty);

				return new[] { group };
			}
		}

        public void Update(IPluginConfiguration configuration)
		{
			_configuration = configuration;
		}
		#endregion

		#region IRequiredConfigurationPlugin
		public bool IsConfigured
		{
			get { return _configuration.GetString("stringProperty") == "有效"; }
		}
		#endregion

		#region IRenderableConfigurable
		public string GetConfigurationHtml(string apiJson)
		{
			return string.Format(@"
<div id=""sample-configurable-plugin-editor"">
	这是个<strong>自定义</strong>的配置界面。
</div>
<script type=""text/javascript"">
	(function() {{
		var api = {0};
		api.registerContent([{{
			name: '示例',
			orderNumber: 0,
			selected: function() {{ $('#sample-configurable-plugin').show(); }},
			unselected: function() {{ $('#sample-configurable-plugin').hide(); }}
		}}]);
	}})();
</script>
",
	apiJson);
		}
		#endregion
	}
}

此示例实现是只读的,但显示为:

GetConfigurationHtml 方法提供了 JSON 格式的客户端 API,可用于与平台定义的插件编辑器界面交互和扩展。该示例注册一个名为“示例”的选项卡,但可以添加多个选项卡。

此示例不是实际示例,因为它实际上不会公开或编辑任何配置字段。通常,完整实现将使用插件定义的小组件,该小组件可以读/写插件配置值,通过将 JSON API 传递到私有小组件 API 来实现 GetConfigurationHtml。

  • 分享
  • 历史
  • 更多
  • 取消
相关
推荐
Copyright © 2021 东莞市连易网络科技有限公司. All rights reserved.
Powered by Limyee Commerce System(3.0.0). © 2014 - 2025 Limyee Inc.