如何编写nopCommerce插件
原文鏈接http://www.cnblogs.com/dingsea/archive/2012/03/05/2381062.html
插件(Plug-in,又叫addin、add-in、addon或add-on)是一種電腦程序,通過(guò)和應(yīng)用程序的互動(dòng),用來(lái)替應(yīng)用程序增加一些所需要的特定的功能。(Wikipedia)
插件用來(lái)擴(kuò)展nopCommerce的功能,nopcommcer有多種類型的插件。比如支付方式中的paypal,稅率供應(yīng)商,配送計(jì)算方式 (UPS,USP,Fedex),小部件(live? chat功能)等等。nopCommerce本身也自帶了很多不同的插件。你可以在官網(wǎng)上搜索是否已經(jīng)有人上傳了滿足你需要的插件。如果沒有,繼續(xù)往下看。
?
插件結(jié)構(gòu),所用文件,所在位置
1.你第一件事就是要在解決方案中新建一個(gè)“類庫(kù)”項(xiàng)目。最好的辦法是把插件都放在解決方案根目錄(不過(guò)小心不要和Nop.Web下邊的 plugins目錄搞混了,那兒是放已布置插件的),而且最好把插件也都放在解決方案目錄的plugin目錄中(關(guān)于更多解決方案文件夾的信息,請(qǐng)猛擊此處)
最好以這種方法來(lái)命名:”Nop.Plugin.{Group}.{Name}”。{Group}是你插件的分類(比如支付),{Name}是你的 插件名(比如”AuthorizeNet”),那么Authorize.NET的支付插件就會(huì)有這樣的名 字:Nop.Plugin.Payments.AuthorizeNet。
?
2.一旦建立了插件項(xiàng)目,把輸入路徑改為”..\..\Presentation\Nop.Web\Plugins\{Group}.{Name} \”,比如 Authorize.NET 支付插件就會(huì)有這樣的輸入路徑:? “..\..\Presentation\Nop.Web\Plugins\Payments.AuthorizeNet\”。搞定以后,對(duì)應(yīng)的插件 DLL就會(huì)被拷貝到 \Presentation\Nop.Web\Plugins\ 文件夾,nopCommerce內(nèi)核會(huì)搜索此文件夾。
步驟:
a.在項(xiàng)目菜單(如Nop.Plugin.DiscountRules.CustomerRoles),點(diǎn)擊屬性
b.選擇生成選項(xiàng)卡
c.點(diǎn)擊輸出路徑旁邊的瀏覽按鈕選擇一個(gè)輸入目錄
ps:在debug和release模式下都要做此步驟。
?
?3.下一步你就要為你的每一個(gè)插件建立一個(gè)Description.txt,此文件包含描述插件的信息。你可以從其它插件目錄中拷出來(lái)。比如Nop.Plugin.DiscountRules.CustomerRoles插件的Description.txt就有如下內(nèi)容:
其實(shí)所有的信息你都能看懂,不過(guò)有一些注意事項(xiàng)。
SystemName必須唯一。
Version字段是你插件的版本號(hào),你可以將它設(shè)置為你喜歡的任何值。
SupportedVersions可以包含一個(gè)由逗號(hào)分隔的(確保nopCommerce當(dāng)前版本包含在此列表中,否則此插件沒戲)支持版本清單。
FileName是用這個(gè)格式:Nop.Plugin.{Group}.{Name}.dll(是你插件的assembly文件名)。
要確保此文件的“復(fù)制到輸出目錄”屬性是“如果較新則復(fù)制”
?
4.所需的最后一個(gè)步驟是創(chuàng)建一個(gè)類實(shí)現(xiàn)IPlugin接口(Nop.Core.Plugins命名空間)。nopCommerce有 BasePlugin類已經(jīng)實(shí)現(xiàn)了一些IPlugin方法,這樣你就不用苦逼地再寫一遍。
nopCommerce還提供一些從IPlugin派生特定的接口。例如,“IPaymentMethod”接口,用于創(chuàng)建新的付款插件,它包含了一些特定的用于付款的方法如ProcessPayment()或 GetAdditionalHandlingFee()。
?
nopCommerce3.3目前有以下的插件接口(不全):
IExternalAuthenticationMethod. 用來(lái)建立外部認(rèn)證方法如 Facebook, Twitter, OpenID, etc.
IWidgetPlugin. 讓你可以創(chuàng)建小部件,小部件在你網(wǎng)站的某些地方出現(xiàn),如左邊的Live chat框
IExchangeRateProvider. 用于獲得貨幣匯率.
IDiscountRequirementRule. 允許你創(chuàng)建新的折扣規(guī)則比如”帳單寄到的國(guó)家必須是……“
IPaymentMethod. 用于處理支付流程的插件。
IShippingRateComputationMethod.這些插件是用于獲取可用的配送方法和正確的運(yùn)費(fèi)。例如,UPS,UPS,FEDEX等。
ITaxProvider. 稅率提供商用于獲取稅率。
?
處理請(qǐng)求。控制器,模型和視圖。
我們現(xiàn)在需要做 的是創(chuàng)建一個(gè)控制器,模型和視圖。
????? 1、MVC控制器負(fù)責(zé)響應(yīng)對(duì)一個(gè)ASP.NET MVC網(wǎng)站的請(qǐng)求。每個(gè)瀏覽器請(qǐng)求被映射到一個(gè)特定的控制器。
????? 2、一個(gè)視圖包含被發(fā)送到瀏覽器的HTML標(biāo)記和內(nèi)容。視圖是相當(dāng)于一個(gè)ASP.NET MVC應(yīng)用程序的頁(yè)面。
????? 3、一個(gè)MVC模型包含視圖或控制器以外的所有應(yīng)用程序邏輯。
那么,我們可以開工了:
創(chuàng)建模型。新插件中加入一個(gè)Models文件夾,然后按你需要新加入一個(gè)模型類。
創(chuàng)建視圖。在插件項(xiàng)目中新加一個(gè)Views文件夾,再在里邊添加一個(gè){Name}文件夾,此處{Name}是指你的插件名。然后再添加一個(gè)Configure.cshtml文件。
很重要的一點(diǎn):此視圖應(yīng)該要注明是嵌入資源。如下圖:
創(chuàng)建控制器。在插件項(xiàng)目中新加一個(gè)controller文件夾,再新加一個(gè)控制器類。
最好的命名辦法是像{Group} {Name}Controller.cs這樣如DiscountRulesCustomerRolesController。
在控制器里再好好地命名一個(gè)action方法用于配置。名字一般叫“Configure”。在configure方法里準(zhǔn)備一個(gè)模型類并將其傳給這個(gè)視圖:Nop.Plugin.{Group}.{Name}.Views.? {Group}{Name}.Configure,即那個(gè)嵌入視圖。
提示一:從其它插件項(xiàng)目中拷貝web.config到你項(xiàng)目里來(lái),這樣在做視圖的時(shí)候有智能感知。智能感知即微軟的自動(dòng)完成亮點(diǎn)。
提示二:搞定以上步驟最簡(jiǎn)單的辦法是直接把其它插件項(xiàng)目拷貝過(guò)來(lái),然后文件和文件夾改名。
提示三:如果你想限制后臺(tái)(店主)控制器的一些action方法,只用在方法上加[AdminAuthorize]屬性即可。
提示四:接下來(lái)要確保所有第三方的程序集引用的“拷貝到本地”屬性設(shè)為false,這樣可以減小部署包的大小。
比如DiscountRules.CustomerRoles插件的項(xiàng)目結(jié)構(gòu)會(huì)如下圖:
?
路由
現(xiàn)在我們要為插件注冊(cè)相應(yīng)的路由。ASP.NET路由用于把瀏覽器發(fā)送的請(qǐng)求映射成MVC控制器相應(yīng)的action方法,接下來(lái)的步驟你會(huì)讀到很多詳細(xì)關(guān)于路由的信息。
1.? 新建文件:RouteProvider.cs,它會(huì)向nopcommerce告知關(guān)于插件路由信息。比如下邊的RouteProvider添加了一個(gè) 新的路由,可以通過(guò)瀏覽器路徑http://www.yourStore.com/Plugins/DiscountRulesCustomerRoles/Configure來(lái)訪問(wèn):
?2.? 一些特寫的插件接口(像上邊講的)和“IMiscPlugin”接口有一個(gè)方法“GetConfigurationRoute”。它應(yīng)該向控制器返回一個(gè) 用于插件后臺(tái)配置的路由。實(shí)現(xiàn)你插件的“GetConfigurationRoute”方法,可以告知nopCommerce你插件的后臺(tái)配置路由是什 么。如果你插件不需要后臺(tái)配置,那么此方法將返回NULL,比如下邊這樣:
public?void?GetConfigurationRoute(out?string?actionName,?out?string?controllerName,?out?RouteValueDictionary?routeValues){actionName?=?null;controllerName?=?null;routeValues?=?null;}只要你有這個(gè)配置方法,插件安裝以后你就能在Admin > Configuration > Plugins找到一個(gè)配置鏈接。(其實(shí),我不知道這句話是什么意思。。。。)
處理“安裝”和“卸載”方法
這是可選步驟。一些插件需要有一定的安裝邏輯,比如插件要添加一些本地資源數(shù)據(jù)。在你的IPlugin實(shí)現(xiàn)中(大多數(shù)情況下是直接從BasePlugin類繼承下來(lái)),重載以下方法:
1. Install:在插件安裝時(shí)會(huì)調(diào)用此方法,你可以在此初始化任何設(shè)置,添加新的本地資源數(shù)據(jù)或添加新的數(shù)據(jù)庫(kù)表(如果需要的話)
2.Uninstall:在卸載插件時(shí)會(huì)調(diào)用此方法。
重要說(shuō)明:如果你重載這些方法,不要隱藏基類的實(shí)現(xiàn)。比如重載”Install”的時(shí)候要記得調(diào)用base.Install(),
Tax.FixedRate的install方法如下:
public?override?void?Install(){//localesthis.AddOrUpdatePluginLocaleResource("Plugins.Tax.FixedRate.Fields.TaxCategoryName",?"Tax?category");this.AddOrUpdatePluginLocaleResource("Plugins.Tax.FixedRate.Fields.Rate",?"Rate");base.Install();}提示:已安裝的插件列表可以在\App_Data\InstalledPlugins.txt找到,這個(gè)列表是在安裝的時(shí)候創(chuàng)建的。
升級(jí)nopCommerce可能會(huì)讓插件掛掉
一些插件可能在新版本的nopCommerce中掛掉無(wú)法工作。如果在升級(jí)后有問(wèn)題,請(qǐng)刪除插件再到nopCommerce官網(wǎng)看看是否有些版本的 插件下載。大部分的插件作者都會(huì)把他們的插件升級(jí)到新的版本,不過(guò)少數(shù)插件并不會(huì)跟隨著一起升級(jí)從而不再支持新版本。不過(guò)大多數(shù)情況下,你可以打開相應(yīng)的? Description.txt文件并編輯SupportedVersions字段。
?
The end.
?
??
?
轉(zhuǎn)載于:https://www.cnblogs.com/jingshihaisu/p/3741166.html
總結(jié)
以上是生活随笔為你收集整理的如何编写nopCommerce插件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SDOI 2006 - 保安站岗
- 下一篇: JBOSS尝鲜