如何編寫nopCommerce外掛程式

來源:互聯網
上載者:User
文章目錄
  • 外掛程式結構,所用檔案,所在位置
  • 路由
  • 處理“安裝”和“卸載”方法
  • 小結

外掛程式(Plug-in,又叫addin、add-in、addon或add-on)是一種電腦程式,通過和應用程式的互動,用來替應用程式增加一些所需要的特定的功能。(Wikipedia)

外掛程式用來擴充nopCommerce的功能,nopcommcer有多種類型的外掛程式。比如支付方式中的paypal,稅率供應商,配送計算方式 (UPS,USP,Fedex),小組件(live chat功能)等等。nopCommerce本身也內建了很多不同的外掛程式。你可以在官網上搜尋是否已經有人上傳了滿足你需要的外掛程式。如果沒有,哥這就手把 手帶你編寫一個出來。

 

文章說明:文章來源自我的部落格,於原文之理解而翻譯,並非出版社那種按字詞翻譯風格。歡迎各位提出意見,也歡迎各位轉載不過務必註明本文原址。更多 nopcommerce的文章請關注http://www.dingsea.com/?tag=nopcommerce,或者加入我們的QQ群 101675096外掛程式結構,所用檔案,所在位置

1.你第一件事就是要在解決方案中建立一個“類庫”項目。最好的辦法是把外掛程式都放在解決方案根目錄(不過小心不要和Nop.Web下邊的 plugins目錄搞混了,那兒是放已布置外掛程式的),而且最好把外掛程式也都放在解決方案目錄的plugin目錄中(關於更多解決方案檔案夾的資訊,請猛擊此處)

最好以這種方法來命名:”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.點擊輸入路徑旁邊的瀏覽按鈕選擇一個輸入目錄

你要在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  其實所有的資訊你都能看懂,不過有一些注意事項。SystemName必須唯一。Version欄位是你外掛程式的版本號碼,你可以將它設定為你喜歡的任何值。SupportedVersions可以包含一個由逗號分隔的(確保nopCommerce目前的版本包含在此列表中,否則此外掛程式沒戲)支援版本清單。FileName是用這個格式:Nop.Plugin.{Group}.{Name}.dll(是你外掛程式的assembly檔案名稱)。要確保此檔案的“拷貝到輸入目錄”屬性是“Copy if newer”


4.所需的最後一個步驟是建立一個類實現IPlugin介面(Nop.Core.Plugins命名空間)。nopCommerce有 BasePlugin類已經實現了一些IPlugin方法,這樣你就不用苦逼地再寫一遍。nopCommerce還提供一些從IPlugin派生特定的接 口。例如,俺們有“IPaymentMethod”介面,用於建立新的付款外掛程式,它包含了一些特定的用於付款的方法如ProcessPayment()或 GetAdditionalHandlingFee()。nopCommerce目前有以下特定的外掛程式介面:
IExternalAuthenticationMethod. 用來建立外部認證方法如 Facebook, Twitter, OpenID, etc.
IWidgetPlugin. 讓你可以建立小組件,小組件在你網站的某些地方出現,如左邊的Live chat框
IExchangeRateProvider. 用於獲得貨幣匯率.
IDiscountRequirementRule. 允許你建立新的折扣規則比如”帳單寄到的國家必須是……“
ISMSProvider. 簡訊供應商,讓你可以在下單時收到簡訊通知。
IPaymentMethod. 用於處理支付流程的外掛程式。
IPromotionFeed. 這些外掛程式用於向Froogle或PriceGrabber提供產品資訊
IShippingRateComputationMethod..這些外掛程式是用於擷取可用的配送方法和正確的運費。例如,UPS,UPS,FEDEX等。
ITaxProvider. 稅率供應商用於擷取稅率。

處理請求。控制器,模型和視圖。

現在你可以在Admin area > Configuration > Plugins看到我們的外掛程式了,不過正如你所想,這個杯具的外掛程式啥都不能做,甚至連個配置的介面都沒有。現在讓我們來建立一個配置頁面。我們現在需要做 的是建立一個控制器,模型和視圖。

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

關於MVC模式在這裡你可以找到更多的資訊。

那麼,我們可以開工了:

建立模型。新外掛程式中加入一個Models檔案夾,然後按你需要新加入一個模型類。
建立視圖。在外掛程式項目中新加一個Views檔案夾,再在裡邊添加一個{Name}檔案夾,此處{Name}是指你的外掛程式名。然後再添加一個Configure.cshtml檔案。很重要的一點:此視圖應該要註明是嵌入資源。
建立控制器。在外掛程式項目中新加一個controller檔案夾,再新加一個控制器類。最好的命名辦法是像{Group} {Name}Controller.cs這樣如PaymentAuthorizeNetController。再好好地命名一個action方法用於配 置。哥叫它“Configure”。準備一個模型類並將其傳給這個視圖:Nop.Plugin.{Group}.{Name}.Views. {Group}{Name}.Configure,即那個嵌入視圖。比如你在Authorize.NET支付外掛程式中的 PaymentAuthorizeNetController實現你就會比較清楚。

提示一:從其它外掛程式項目中拷貝web.config到你項目裡來,這樣在做視圖的時候有智能感知(老丁:啊?真的嗎?這和拷檔案有什麼關係?)。智能感知即微軟的自動完成亮點。

提示二:搞定以上步驟最簡單的辦法是直接把其它外掛程式項目拷貝過來,然後檔案和檔案夾改名。

提示三:如果你想限制後台(店主)控制器的一些action方法,只用在方法上加[AdminAuthorize]屬性即可。

提示四:接下來要確保所有第三方的程式集引用的“拷貝到本地”屬性設為false,這樣可以減小部署套件的大小。

比如Authorize.NET外掛程式的項目結構會如:

路由

現在我們要為外掛程式註冊相應的路由。ASP.NET路由用於把瀏覽器發送的請求映射成MVC控制器相應的action方法,接下來的步驟你會讀到很多詳細關於路由的資訊。

1. 建立如下檔案:RouteProvider.cs,它會向nopcommerce告知關於外掛程式路由資訊。比如下邊的RouteProvider添加了一個 新的路由,可以通過瀏覽器路徑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”。它應該向控制器返回一個 用於外掛程式後台配置的路由。實現你外掛程式的“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 }
};
}

只要你有這個配置方法,外掛程式安裝以後你就能在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();
}

提示:已安裝的外掛程式列表可以在\App_Data\InstalledPlugins.txt找到,這個列表是在安裝的時候建立的。

升級nopCommerce可能會讓外掛程式掛掉

一些外掛程式可能在新版本的nopCommerce中掛掉無法工作。如果在升級後有問題,請刪除外掛程式再到nopCommerce官網看看是否有些版本的 外掛程式下載。大部分的外掛程式作者都會把他們的外掛程式升級到新的版本,不過少數外掛程式並不會跟隨著一起升級從而不再支援新版本。不過大多數情況下,你可以開啟相應的 Description.txt檔案並編輯SupportedVersions欄位。

小結

希望此文能讓你開始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.