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 。
轉載于:https://www.cnblogs.com/zhangruisoldier/p/9178445.html
總結
 
                            
                        - 上一篇: 6.12 理解递归
- 下一篇: iptables 实际操作 之 规则查询
