原址: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的插件之旅並開發出一個出色的插件。