小组件扩展是支持向小组件公开 API 的插件。有关 Limyee 电商平台附带的扩展的文档,请访问小组件扩展文档。
为什么要创建小组件扩展?
您是否希望能够直接从小组件调用任何自定义方法或属性?自定义小组件扩展可以公开这些方法和属性,以便可以直接在 velocity 脚本中调用它们。
创建小组件扩展
首先,我们需要一个类,其中包含一个或多个要在小组件扩展中公开的公共方法或属性。Velocity(脚本化小组件使用的脚本引擎)最适合简单的数据类型和 IDictionarys。
下面的类有一个名为 SayHello 的公共方法。该方法采用单个字符串参数名称并返回“Hello {name}”。
public class Sample { public string SayHello(string name) { return "Hello " + name; } }
为了公开这个类,我们将使用第二个类来实现 IScriptedContentWidgetExtension 插件类型。首先,我们将 Sample 类的一个实例返回到 Extension 方法。
public object Extension { get { return new Sample(); } }
我们还需要为示例扩展提供唯一的名称。对于该示例,我们将使用名称“limyee_v1_sample”。我们建议在命名小组件扩展时使用 {vendor}_v{version_number}_{service_name},以确保扩展名的唯一名称、易于版本控制并与现有扩展保持一致。
public string ExtensionName { get { return "limyee_v1_samples"; } }
一旦 IScriptedContentWidgetExtension 实现并部署到 Limyee 电商平台站点的 bin/ 文件夹中,必须在管理区域中启用它,然后才能将其用于脚本化小组件。
示例
示例扩展的完整源代码:
using Limyee.Extensibility.UI.Version1; namespace Samples { public class Sample { public string SayHello(string name) { return "Hello " + name; } } public class SampleWidgetExtension : IScriptedContentWidgetExtension { #region IScriptedContentWidgetExtension Members public string ExtensionName { get { return "limyee_v1_samples"; } } public object Extension { get { return new Sample(); } } #endregion #region IPlugin Members public string Name { get { return "扩展示例"; } } public string Description { get { return "使小组件能够使用 Sample 类的公共成员。"; } } public void Initialize() { } #endregion } }
使用扩展
现在我们的扩展已启用,我们可以创建一个调用我们的扩展的小组件:
$limyee_v1_samples.SayHello('World')
将此小组件添加到页面,您应该会看到小组件输出“Hello World”。如果对小组件扩展的调用引发了异常,则不会为终端用户呈现该小组件。编辑页面时,您将看到呈现的异常,而不是预期的小组件内容。错误信息也可以返回响应,以提供可翻译或更容易理解的错误消息。返回使用或继承以下类型之一(ApiList、PagedList、ApiEntity 或 AdditionalInfo)的值,通过在返回对象上提供 Errors 集合属性来添加错误的返回。