nopcommerce商城系統--如何編寫一個插件


原址:http://www.nopcommerce.com/docs/77/how-to-write-a-nopcommerce-plugin.aspx

plug-in (或 plugin)是一個為更大的軟件應用程序添加特定的能力的組件(Wikipedia)


 插件是用來擴展nopCommerce功能的。nopCommerce擁有多種類型的插件。例如:支付方式PayPal,稅務機構送貨方式計算方法UPS, USP, FedEx),小部件如“在線聊天”塊等等 nopCommerce本身也自帶了很多不同的插件。您還可以nopCommerce官方網站搜索各種符合您要求的插件如果沒有,本文將引導您完成創建自己的插件的過程

 該插件結構,所需文件和所在位置

 1、你需要做的第一件事情就是解決方案中創建一個新的“類庫”項目。將所有的插件放在你的解決方案的根目錄下\ Plugins目錄是一個很好的做法不要Nop.Web項目中的\ plugins子目錄混淆了,因為這里是放置已發布生成的插件DLL文件的地方這是一個很好的做法,將所有的插件進入“插件”的解決方案文件夾(關於更多解決方案文件夾的信息,請點擊這里

 

 最好以這種方法來命名:”Nop.Plugin.{Group}.{Name}”。{Group}是你插件的分類(比如支付),{Name}是你的插件名 (比如”AuthorizeNet”),那么Authorize.NET的支付插件就會有這樣的名 字:Nop.Plugin.Payments.AuthorizeNet。

 2、創建項目之后,我們需要設置項目編譯文件DLL的輸出位置:"..\..\Presentation\Nop.Web\Plugins\{Group}.{Name}\"。比如 Authorize.NET 支付插件就會有這樣的輸入路徑: “..\..\Presentation\Nop.Web\Plugins\Payments.AuthorizeNet\”。設置完成以后,對應的插件 DLL就會編譯生成輸出到 \Presentation\Nop.Web\Plugins\ 文件夾,nopCommerce內核會搜索此文件夾。

 方法:選中項目-》點擊鼠標右鍵-》選中生成-》點擊瀏覽按鈕設置路徑(在DEBUG和Release模式下都要這么設置)

 3、下一步你就要為你的每一個插件建立一個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、最后一步就是創建一個實現接口的IPlugin ( Nop.Core.Plugins命名空間)的類。 nopCommerce的BasePlugin類已經實現了一些IPlugin方法,你就可以不需要再實現一遍了,這樣就避免了功能代碼重復。nopCommerce還提供一些從IPlugin派生的特定的接口。例如,用於創建新的付款方式插件“ IPaymentMethod ”接口。它包含了一些特定只有具體的付款功能的方法,如ProcessPayment()或GetAdditionalHandlingFee () 。目前nopCommerce具有以下特定的插件接口:

  1. IExternalAuthenticationMethod:用於創建外部認證方法,如Facebook,Twitter的, OpenID的,等等
  2. IWidgetPlugin: 它允許你創建小部件。 Widget是呈現在您的網站的某些部分。例如,它可以在您的網站的左側列中顯示“在線聊天”塊。
  3. IExchangeRateProvider:用於獲取貨幣匯率。
  4. IDiscountRequirementRule:允許你創建新的折扣規則,如”帳單寄到的國家必須是……“
  5. IPaymentMethod:是用於支付處理的插件接口
  6. IShippingRateComputationMethod:是用於獲取可用的配送方法和正確的運費。例如,UPS,UPS,FEDEX等。
  7. ITaxProvider稅務提供商用於獲取稅率

 如果這些接口不適合你的插件,你可以使用“IMiscPlugin”接口。

 注意事項:完成項目生成后,請清理解決方案,因為有些資源被緩存,在開發者繼續編碼的時候,可能出問題。

處理請求(requests)。控制器(Controllers)、模型(models)和視圖(views)。

現在你可以在Admin area > Configuration > Plugins看到我們的插件了。但正如你猜到的一樣,我們的插件什么都不做。甚至不需要為它配置用戶界面。現在讓我們萊爾創建一個插件配置頁面我們需要做的就是創建一個控制器,模型和視圖。

  1. MVC控制器負責響應一個ASP.NET MVC網站提出的請求。每個瀏覽器請求會映射到特定的控制器
  2. 一個視圖包含被發送到瀏覽器的HTML標記和內容。視圖是相當於一個ASP.NET MVC應用程序的頁面。
  3. 一個MVC模型包含視圖或控制器以外的所有應用程序邏輯。

關於MVC模式在這里你可以找到更多的信息。

現在我們可以開始插件的編寫了:

  1. 創建模型: 在新插件項目中添加一個名稱為"Models"的文件夾, 然后在文件夾中添加一個你需要的模型類.
  2. 創建視圖: 在新插件項目中添加一個名稱為"Views"的文件夾, 然后在文件夾中添加一個{Name}文件夾,此處{Name}是指你的插件名。然后再添加一個Configure.cshtml文件。注意:此視圖應該要注明是嵌入資源。
  3. 創建控制器: 在新插件項目中添加一個名稱為"Controllers"的文件夾, 然后在文件夾中添加一個控制器類. 最好的命名辦法是 {Group}{Name}Controller.cs. 例如, PaymentAuthorizeNetController. 然后在控制器中創建一個叫做"Configure"方法用於配置. 准備一個模型類並將其傳給這個視圖: "Nop.Plugin.{Group}.{Name}.Views. {Group}{Name}.Configure" (即那個嵌入視圖). 例如, 查看在Authorize.NET支付插件中的PaymentAuthorizeNetController實現,你就會比較清楚了.

 

 

 

       提示1:打開其他任何插件,並把其中的web.config復制到你的插件項目該文件允許在做視圖的時候有智能感知。智能感知是微軟實現自動完成

       提示2完成上述步驟最簡單的方法就是打開其他任何插件,把它的文件拷貝到您的插件項目然后,只需重命名類和文件夾就OK了

       提示3:如果你想限制只能是管理員店主訪問控制器操作方法那么就[AdminAuthorize]屬性標記這個方法就OK了

       提示4最后,確保所有第三方程序集引用“復制本地屬性設置為“False”(不要復制這將減少部署的文件的大小。

路由

現在我們來注冊插件的相應路由。ASP.NET路由用於把瀏覽器發送的請求映射成MVC控制器相應的action方法,在這里你可以找到更多關於路由的信息請按照下面的步驟注冊

  1、一些特寫的插件接口(如上所述)和“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         }
示例代碼

  2、可選)如果您需要添加一些自定義的路由,可以創建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類派生),並重寫下面的方法:

  1. Install. 此方法將插件安裝過程中被調用。你可以在這里初始化任何設置添加本地資源或者創建一些新的數據庫表如果有必要)
  2. Uninstall. 這個方法取消插件的調用.

 注意:如果重寫這些方法得其中一個,需要調用基方法而不能隱藏它。比如,重寫“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         }
Install方法重寫示例

備注:已安裝插件可以在”\ App_Data\ InstalledPlugins.txt“中找到這份清單是在安裝過程中創建的

 升級nopCommerce可能會讓插件無法工作

 nopCommerce升級后,有些插件可能會不兼容nopCommerce新版本。如果在升級到較新版本后問題刪除插件,然后在nopCommerce官方網站,查看是否有兼容nopCommerce新的版本的插件大部分插件開發者都會升級他們的插件,以適應新的版本,但是,有些插件不會升級從而不兼容nopCommerce的新版本但在大多數情況下你可以打開相應的 Description.txt文件並編輯SupportedVersions字段。

 小結

希望此文能讓你開始nopCommerce的插件之旅並開發出一個出色的插件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM