nopcommerce商城系統--如何編寫一個外掛程式

來源:互聯網
上載者:User

標籤:

外掛程式是用來擴充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 methodsFriendlyName: Credit CardSystemName: Payments.AuthorizeNetVersion: 1.00SupportedVersions: 2.30Author: nopCommerce teamDisplayOrder: 1FileName: 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,比如下邊這樣:

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 }
};
}

範例程式碼

 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外掛程式)來訪問一個新的路由:

public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(RouteCollection routes)
{


routes.MapRoute("Plugin.Payments.PayPalStandard.PDTHandler",
"Plugins/PaymentPayPalStandard/PDTHandler",
new { controller = "PaymentPayPalStandard", action = "PDTHandler" },
new[] { "Nop.Plugin.Payments.PayPalStandard.Controllers" }
);

}
public int Priority
{
get
{
return 0;
}
}
}

範例程式碼

 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 Priority15         {16             get17             {18                 return 0;19             }20         }21     }

 外掛程式安裝了以後,且添加了配置方法,你就能在Admin > Configuration > Plugins找到一個配置連結。

處理”安裝“和”卸載“方法

這一步是可選的。有些外掛程式在安裝過程中需要額外的邏輯。例如,一個外掛程式可以添加本地資源。建立一個實現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();
}

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的外掛程式之旅並開發出一個出色的外掛程式。

 

nopcommerce商城系統--如何編寫一個外掛程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.