nop 插件解析
在计算领域,插件( plug-in or plugin)是将特定的功能增加到大型软件中的软件组件。
nopCommerce插件用来扩展nopCommerce的功能。nopCommerce 有几种插件。例如,支付插件 ( PayPal),税收, 货运( UPS, USP, FedEx), 小应用程序widgets ( 'live chat' block), 等等。 nopCommerce 已带有大量插件。你可以在nopCommerce 官方网站搜索其他人创建的满足你需要的插件。如果没有找到,本文将告诉你如何自己创建组件。
组件结构、要求的文件和文件存放的位置
首先,你必须在解决方案中创建新的类库项目文件。组件文件最好存放在解决方案根目录的\Plugins目录下(不要与\Nop.Web\Plugins搞混,\Nop.Web\Plugins存放的是已经部署的插件)。
1. 插件项目文件名形如 "Nop.Plugin.{Group}.{Name}", {Group} 是插件组名 (例如,支付)。 {Name}是插件名(例如, "AuthorizeNet")。例如, Authorize.NET 支付插件的名称是:Nop.Plugin.Payments.AuthorizeNet。
2. 插件项目文件建立后,需要更新项目生成的输出路径。 输出路径设置为 "..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\"。例如,Authorize.NET 支付插件的输出路径是: "..\..\Presentation\Nop.Web\Plugins\Payments.AuthorizeNet\"。生成的插件DLL文件将存放在目录 \Presentation\Nop.Web\Plugins\ 下, nopCommerce核心搜索这个目录以便找到有效的插件。
a. 在项目菜单上,点击属性。
b. 点击生成页
c. 点击输出路径右边浏览按钮,选择适当的路径。
3. 创建每个插件都必须的文件Description.txt。这个文件包含了描述插件的元信息。可以复制现有插件的文件Description.txt,修改这个文件满足新插件的需要。例如, Authorize.NET 支付插件的文件 Description.txt如下:
Group: Payment methods
FriendlyName: Credit Card
SystemName: Payments.AuthorizeNet
Version: 1.00
SupportedVersions: 2.30
Author: nopCommerce team
DisplayOrder: 1
FileName: Nop.Plugin.Payments.AuthorizeNet.dll
4. 文件的内容一目了然,但有几点需要注意。SystemName必须唯一。Version 是插件的版本;其值可以随意设置。SupportedVersions 是支持的nopCommerce 版本,用逗号分隔(确保当前的nopCommerce版本包含其中,否则插件就不能加载)。 FileName 的格式是Nop.Plugin.{Group}.{Name}.dll。确保文件Description.txt的属性“复制到输出目录”设置为“如果较新则复制”。
5. 最后一步就是创建一个类实现IPlugin接口(Nop.Core.Plugins 名称空间)。 nopCommerce 有一个BasePlugin 类,该类已经实现了一些IPlugin方法,使得我们可以避免代码重复。nopCommerce还提供了一些从IPlugin导出的接口。例如,接口 "IPaymentMethod" 用于创建新的支付方法插件。该接口还包含一些支付方式方法,例如, ProcessPayment() 或 GetAdditionalHandlingFee()。目前nopCommerce有下面特定的插件接口:
a. IExternalAuthenticationMethod. 用于创建外部授权方法,例如Facebook, Twitter, OpenID, 等等。
b. IWidgetPlugin. 允许创建小应用程序。小应用程序呈现在网页的某个部分。例如, "Live chat" 呈现在网页的左侧。
c. IExchangeRateProvider. 用于获得汇率。
d. IDiscountRequirementRule. 允许创建新的折扣规则,例如"Billing country of a customer should be…"
e. ISMSProvider. SMS 提供者允许你发送SMS事件通知。
f. IPaymentMethod. 用于支付处理。
g. IPromotionFeed. These plugins are used for feed generations such as Froogle or PriceGrabber
h. IShippingRateComputationMethod. 用于提取可接受的发货方式和运费。例如, UPS, UPS, FedEx, 等等。
i. ITaxProvider. 用于获得税率。
如果上面的接口不是你的插件需要的,你可以用"IMiscPlugin" 接口。
处理请求。Controllers, models and views.
现在你可以在Admin area > Configuration > Plugins看到插件了。但是新插件还什么也没有做。甚至还没有用于设置的用户界面。我们现在就来创建一个设置页面。我们需要做的是创建controller, model, 和view。
1. MVC 控制器负责响应对ASP.NET MVC 网站的请求。每一个浏览器请求都映射到一个控制器。
2. 视图包含了发送到浏览器的HTML 标记和内容。
3. MVC 模型包含了应用逻辑。
让我们开始吧:
1. 创建model. 在新建的插件目录下增加Models目录,在Models目录下新建model 类。
2. 创建view. 在新建的插件目录下增加Views目录。然后新建{Name}目录 ( {Name} 是插件名称),新建文件Configure.cshtml。 注意:文件属性“生成操作”应设置为“嵌入的资源”。
3. 创建controller. 在新建的插件目录下增加Controllers目录。然后新建一个controller 类。最好用类文件名{Group}{Name}Controller.cs。例如PaymentAuthorizeNetController.cs。创建适当的action 方法。并命名为 "Configure"。编写model 类并传递给相应的视图: "Nop.Plugin.{Group}.{Name}.Views. {Group}{Name}.Configure"
Tip 1: 可以复制现有插件的文件web.config 到新建的插件项目文件下。这个文件使得你可以使用智能感知。
Tip 2: 最容易的方法是复制现有插件的文件,然后修改成新的插件。
Tip 3: 如果限制只有管理员可以访问控制器的action方法,只需将方法标记为[AdminAuthorize] 属性。
Tip 4: Going forward make sure "Copy local" properties of all third-party assembly references are set to "False" (do not copy). This will reduce the deployed package size.
例如,Authorize.NET 插件项目结构如下图所示:
路由
我们需要注册插件路由。ASP.NET 路由负责映射浏览器请求到MVC控制器action,步骤如下:
1. 新建文件RouteProvider.cs。该文件将插件路由通知给nopCommerce 系统。例如,下面的RouteProvider类增加了一个新路由,使得在浏览器打开URL, http://www.yourStore.com/Plugins/PaymentAuthorizeNet/Configure/ 可以访问
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Plugin.Payments.AuthorizeNet.Configure",
"Plugins/PaymentAuthorizeNet/Configure",
new { controller = "PaymentAuthorizeNet", action = "Configure" },
new[] { "Nop.Plugin.Payments.AuthorizeNet.Controllers" }
);
}
public int Priority
{
get
{
return 0;
}
}
}
2. 有些插件接口和"IMiscPlugin" 接口有方法: "GetConfigurationRoute"。 该方法应当返回一个路由给控制器action,用于插件配置。实现你的插件接口的方法"GetConfigurationRoute"。该方法通知nopCommerce 什么路由用于插件配置。如果你的插件没有配置页, "GetConfigurationRoute" 应返回null。如下所示:
public void GetConfigurationRoute(out string actionName,
out string controllerName,
out RouteValueDictionary routeValues)
{
actionName = "Configure";
controllerName = "PaymentAuthorizeNet";
routeValues = new RouteValueDictionary()
{
{ "Namespaces", "Nop.Plugin.Payments.AuthorizeNet.Controllers" },
{ "area", null }
};
}
一旦你安装了插件,增加了configuration 方法,你就可以在Admin > Configuration > Plugins 下找到配置插件的链接。
处理"Install" and "Uninstall" 方法
这一步是可选的。一些插件在安装时要求一些其他的逻辑,例如,插入新的本地资源。打开IPlugin 实现 (大多数情况下它是从BasePlugin类导出的),覆写下面的方法:
1. Install. 安装插件时调用这个方法。你可以在这个方法中初始化任何设置值,插入新的本地资源,或者是创建新的数据库表(如果必要)。
2. Uninstall. 卸载插件时调用这个方法。
注意: 如果覆写这两个方法之一,不要隐藏方法的基实现。例如,覆写"Install" 方法应该包含方法调用:base.Install()。 Authorize.NET 插件的"Install"方法如下:
public override void Install()
{
var settings = new AuthorizeNetPaymentSettings()
{
UseSandbox = true,
TransactMode = TransactMode.Authorize,
TransactionKey = "123",
LoginId = "456"
};
_settingService.SaveSetting(settings);
base.Install();
}
Tip: \App_Data\InstalledPlugins.txt是已安装的插件列表。
升级nopCommerce 对插件的影响
一些插件可能已过时,在新版的nopCommerce中不再能用。如果你遇到这样的问题,删除插件,在官方nopCommerce网站上看看插件是否有新版本。许多插件的作者也会升级插件以适应新版本的nopCommerce。然而,也有插件没有升级,随着nopCommerce的改进变得过时了。但是,你总是可以打开文件Description.txt file 更新SupportedVersions 。
nop 插件解析的更多相关文章
- saltstack主机管理项目:动态调用插件解析-模块解析(五)
一.动态调用插件解析 1.目录结构 1.base_module代码解析: def syntax_parser(self,section_name,mod_name,mod_data): print(& ...
- Unity中用Mono插件解析xml文件
1.解压压缩包,把文件夹拖到脚本文件夹下 Mono是第三方基金会开发的开源的东西,通过Mono基础上开发的程序可以在各个系统下运行.开发语言是C#. 用插件解析比较高效,平台运行稳定.使用简单. Un ...
- 使用logstash的grok插件解析springboot日志
使用logstash的grok插件解析springboot日志 一.背景 二.解决思路 三.前置知识 四.实现步骤 1.准备测试数据 2.编写`grok`表达式 3.编写 logstash pipel ...
- Skywalking光会用可不行,必须的源码分析分析 - Skywalking Agent &插件解析
3 Skywalking源码导入 接上文,已经学习了Skywalking的应用,接下来我们将剖析Skywalking源码,深度学习Skywalking Agent. 3.1 源码环境搭建 当前最新版本 ...
- (十三)Maven插件解析运行机制
这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其所以然. 1.插件保存在哪里? 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的.在用到插件的时候会先从本地仓 ...
- [maven] 常用插件解析
参考资料:http://my.oschina.net/zh119893/blog/276090 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完 ...
- Maven-12: 插件解析机制
1. 插件仓库 2. 插件的默认groupId 3. 解析插件版本 4. 解析插件前缀
- 开发一个简单的chrome插件-解析本地markdown文件
准备软件环境 1. 软件环境 首先,需要使用到的软件和工具环境如下: 一个最新的chrome浏览器 编辑器vscode 2. 使用的js库 代码高亮库:prismjs https://prismjs. ...
- logstash常用插件解析
官方地址:https://www.elastic.co/guide/en/logstash-versioned-plugins/current/index.html 配置文件写法: # 日志导入inp ...
随机推荐
- HDU 5336——XYZ and Drops——————【广搜BFS】
XYZ and Drops Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- css内容整理1
1.css引入的四种方式1.行内2.内嵌3.链接 <link href="1.css" rel="stylesheet">4.导入@import u ...
- vlh 标签详解
1.vlh:root root标签做为所有vlh标签的根标签. 1)value 在给定的范围内,包含在ValueList或list的变量名. List的实例自动被DefaultListBacke ...
- CSS之background-image:在一个元素中设置给定数量的背景图片
众所周知,可以通过设置background-repeat的值来改变背景图片的重复次数.但有一个问题,background-repeat的值不是让图片只有1个,就是让图片铺满.如果只想设置给定数量的图片 ...
- 执行引入外部 jar 包的类的方法
liunx 系统中,命令行中语法:(.后面是冒号:) java -cp .:third.jar MyClass windows 系统中命令行的语法:(.后面是分号;) java -cp .;third ...
- (生产)vue-router:路由
参考:https://router.vuejs.org/zh-cn/ 安装 直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js 使用: ...
- php网站修改默认访问文件的nginx配置
搭建好lnmp后,有时候并不需要直接访问index.php,配置其他的默认访问文件比如index.html这时候需要配置一下nginx才能访问到你想要设置的文件 直接上代码,如下是我的配置的一份简单的 ...
- 获取文件绝对路径:__FILE__与$_SERVER[SCRIPT_FILENAME'']的区别
1.获取路径 (1)__FILE__ 获取某文件在本地目录中的绝对路径,(也就是说,哪个文件执行这行代码,它就获取哪个文件的绝对路径) (2)$__SERVER['SCRIPT_FILENAME'] ...
- MySQL入门很简单: 7 触发器
触发器是由事件来触发某个操作,这些事件包括INSERT语句,UPDATE语句和DELETE语句 1.创建触发器 1)创建只有一个执行语句的触发器 例子:再向department表中执行INSERT操作 ...
- andriod给ListView中的TextView增加跑马灯效果
正常情况下跑马灯效果只需要在TextView中添加android:ellipsize="marquee" android:singleLine="true" a ...