原址:http://www.nopcommerce.com/docs/77/how-to-write-a-nopcommerce-plugin.aspxhtml
plug-in (或 plugin)是一个为更大的软件应用程序添加特定的能力的组件(Wikipedia)web
插件是用来扩展nopCommerce功能的。nopCommerce拥有多种类型的插件。例如:支付方式(PayPal),税务机构,送货方式计算方法(UPS, USP, FedEx),小部件(如“在线聊天”块)等等。 nopCommerce自己也自带了不少不一样的插件。您还能够在nopCommerce官方网站搜索各类符合您要求的插件。若是没有,本文将引导您完成建立本身的插件的过程。数据库
该插件结构,所需文件和所在位置浏览器
一、你须要作的第一件事情就是在解决方案中建立一个新的“类库”项目。将全部的插件放在你的解决方案的根目录下的\ Plugins目录中是一个很好的作法(不要与Nop.Web项目中的\ plugins子目录混淆了,由于这里是放置已发布生成的插件DLL文件的地方)。这是一个很好的作法,将全部的插件进入“插件”的解决方案文件夹(关于更多解决方案文件夹的信息,请点击这里)。缓存
最好以这种方法来命名:”Nop.Plugin.{Group}.{Name}”。{Group}是你插件的分类(好比支付),{Name}是你的插件名 (好比”AuthorizeNet”),那么Authorize.NET的支付插件就会有这样的名 字:Nop.Plugin.Payments.AuthorizeNet。mvc
二、建立项目以后,咱们须要设置项目编译文件DLL的输出位置:"..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\"。好比 Authorize.NET 支付插件就会有这样的输入路径: “..\..\Presentation\Nop.Web\Plugins\Payments.AuthorizeNet\”。设置完成之后,对应的插件 DLL就会编译生成输出到 \Presentation\Nop.Web\Plugins\ 文件夹,nopCommerce内核会搜索此文件夹。asp.net
方法:选中项目-》点击鼠标右键-》选中生成-》点击浏览按钮设置路径(在DEBUG和Release模式下都要这么设置)ide
三、下一步你就要为你的每个插件创建一个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
四、最后一步就是建立一个实现接口的IPlugin ( Nop.Core.Plugins命名空间)的类。 nopCommerce的BasePlugin类已经实现了一些IPlugin方法,你就能够不须要再实现一遍了,这样就避免了功能代码重复。nopCommerce还提供一些从IPlugin派生的特定的接口。例如,用于建立新的付款方式插件“ IPaymentMethod ”接口。它包含了一些特定只有具体的付款功能的方法,如ProcessPayment()或GetAdditionalHandlingFee () 。目前nopCommerce具备如下特定的插件接口:ui
若是这些接口不适合你的插件,你可使用“IMiscPlugin”接口。
注意事项:完成项目生成后,请清理解决方案,由于有些资源被缓存,在开发者继续编码的时候,可能出问题。
处理请求(requests)。控制器(Controllers)、模型(models)和视图(views)。
如今你能够在Admin area > Configuration > Plugins看到咱们的插件了。但正如你猜到的同样,咱们的插件什么都不作。甚至不须要为它配置用户界面。如今让咱们莱尔建立一个插件配置页面。咱们须要作的就是建立一个控制器,模型和视图。
关于MVC模式在这里你能够找到更多的信息。
如今咱们能够开始插件的编写了:
提示1:打开其余任何插件,并把其中的web.config复制到你的插件项目。该文件容许您在作视图的时候有智能感知。智能感知是微软实现自动完成的。
提示2:完成上述步骤最简单的方法就是打开其余任何插件,把它的文件拷贝到您的插件项目。而后,只需重命名类和文件夹就OK了。
提示3:若是你想限制只能是管理员(店主)访问控制器的操做方法,那么就用[AdminAuthorize]属性标记这个方法就OK了。
提示4:最后,确保全部第三方程序集引用的“复制本地”属性设置为“False”(不要复制)。这将减小部署的文件的大小。
路由
如今咱们来注册插件的相应路由。ASP.NET路由用于把浏览器发送的请求映射成MVC控制器相应的action方法,在这里你能够找到更多关于路由的信息。请按照下面的步骤注册:
一、一些特写的插件接口(如上所述)和“IMiscPlugin”接口有一个“GetConfigurationRoute”方法。它应该向控制器返回一个用于插件后台配置的路由。实现你插件的“GetConfigurationRoute”方法,能够告知nopCommerce你的插件的后台路由配置是什么。若是你插件没有后台配置,那么此方法将返回NULL,好比下边这样:
1 public void GetConfigurationRoute(out string actionName, 2 out string controllerName, 3 out RouteValueDictionary routeValues) 4 { 5 actionName = "Configure"; 6 controllerName = "PaymentAuthorizeNet"; 7 routeValues = new RouteValueDictionary() 8 { 9 { "Namespaces", "Nop.Plugin.Payments.AuthorizeNet.Controllers" }, 10 { "area", null } 11 }; 12 }
二、(可选)若是您须要添加一些自定义的路由,能够建立RouteProvider.cs文件。它通知nopCommerce系统关于插件的路由。例如,下面的RouteProvider类添加一个新的路由,能够经过打开Web浏览器并导航到http://www.yourStore.com/Plugins/PaymentPayPalStandard/PDTHandler网址(使用PayPal插件)来访问一个新的路由:
1 public partial class RouteProvider : IRouteProvider 2 { 3 public void RegisterRoutes(RouteCollection routes) 4 { 5 6 7 routes.MapRoute("Plugin.Payments.PayPalStandard.PDTHandler", 8 "Plugins/PaymentPayPalStandard/PDTHandler", 9 new { controller = "PaymentPayPalStandard", action = "PDTHandler" }, 10 new[] { "Nop.Plugin.Payments.PayPalStandard.Controllers" } 11 ); 12 13 } 14 public int Priority 15 { 16 get 17 { 18 return 0; 19 } 20 } 21 }
插件安装了之后,且添加了配置方法,你就能在Admin > Configuration > Plugins找到一个配置连接。
处理”安装“和”卸载“方法
这一步是可选的。有些插件在安装过程当中须要额外的逻辑。例如,一个插件能够添加本地资源。新建一个实现IPlugin接口的类(在大多数状况下,是从BasePlugin类派生),并重写下面的方法:
注意:若是重写这些方法得其中一个,须要调用基方法而不能隐藏它。好比,重写“Install”方法,须要调用后面的方法“Base.Install()", Authorize.NET插件的“Install”的方法看起来像下面的代码:
1 public override void Install() 2 { 3 var settings = new AuthorizeNetPaymentSettings() 4 { 5 UseSandbox = true, 6 TransactMode = TransactMode.Authorize, 7 TransactionKey = "123", 8 LoginId = "456" 9 }; 10 _settingService.SaveSetting(settings); 11 12 base.Install(); 13 }
备注:已安装插件能够在”\ App_Data\ InstalledPlugins.txt“中找到。这份清单是在安装过程当中建立的。
升级nopCommerce可能会让插件没法工做
nopCommerce升级后,有些插件可能会不兼容nopCommerce新版本。若是在升级到较新版本后有问题,删除插件,而后在nopCommerce官方网站,查看是否有兼容nopCommerce新的版本的插件。大部分插件开发者都会将升级他们的插件,以适应新的版本,可是,有些插件不会升级从而不兼容nopCommerce的新版本。但在大多数状况下,你能够打开相应的 Description.txt文件并编辑SupportedVersions字段。
小结
但愿此文能让你开始nopCommerce的插件之旅并开发出一个出色的插件。