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的插件之旅并开发出一个出色的插件。

nopcommerce商城系统--如何编写一个插件,码迷,mamicode.com

时间: 2024-10-03 11:38:01

nopcommerce商城系统--如何编写一个插件的相关文章

[转]nopcommerce商城系统--如何编写一个插件

本文转自:http://www.cnblogs.com/ganqiyin/p/3680771.html 原址:http://www.nopcommerce.com/docs/77/how-to-write-a-nopcommerce-plugin.aspx plug-in (或 plugin)是一个为更大的软件应用程序添加特定的能力的组件(Wikipedia) 插件是用来扩展nopCommerce功能的.nopCommerce拥有多种类型的插件.例如:支付方式(PayPal),税务机构,送货方式

nopcommerce商城系统--源代码结构和架构

这个文档是让开发者了解nopcommerce解决方案结构的指南.这是新的nopcommerce开发者学习nopcommerce代码的相关文档.首先,nopCommerce源代码是很容易得到的.它是一个开源应用程序,因此,所有你只要从代码托管完整下载它就行了.在你打开VS以后项目和文件夹都会完整列出来,我们建议你在看此文档的同时也打开你的VS来浏览项目和文件. 大部分项目.目录和文件的都可以通过名称,得到设计者的一个粗略想法.例如,这个Nop.Plugin.Payments.PayPalStand

NopCommerce商城系统中的eventbus

nopcommerce中事件发布与订阅是相对比较规范的, 1.IConsumer 消费者 public interface IConsumer<T> { void HandleEvent(T eventMessage); } 2.IEventPublisher 事件发布者 事件调用者,程序入口, /// <summary> /// Evnt publisher /// </summary> public interface IEventPublisher { /// &

编写一个插件(前面JavaScript高级总结)

需要具备知识点: html.css js基础.dom操作 jquery API: 添加事件.事件委托.事件冒泡.创建添加结点 dom位置 尺寸 动画过渡.显示隐藏 尝试封装jq的简单插件 数组添加 位置查找 https://www.haorooms.com/post/js_jquery_chajian https://blog.csdn.net/qq_39725309/article/details/80689785 有一定的oop面向对象思想 未完待续... 原文地址:https://www.

如何编写一个WebPack的插件原理及实践

_ 阅读目录 一:webpack插件的基本原理 二:理解 Compiler对象 和 Compilation 对象 三:插件中常用的API 四:编写插件实战 回到顶部 一:webpack插件的基本原理 webpack构建工具大家应该不陌生了,那么下面我们来简单的了解下什么是webpack的插件.比如我现在写了一个插件叫 "kongzhi-plugin" 这个插件.那么这个插件在处理webpack编译过程中会处理一些特定的任务. 比如我们现在在webpack.config.js 中引入了一

微信小程序购物商城系统开发系列-目录结构

上一篇我们简单介绍了一下微信小程序的IDE(微信小程序购物商城系统开发系列-工具篇),相信大家都已经蠢蠢欲试建立一个自己的小程序,去完成一个独立的商城网站. 先别着急我们一步步来,先尝试下写一个自己的小demo. 这一篇文章我们主要的是介绍一下小程序的一些目录结构,以及一些语法,为我们后面的微信小程序商城系统做铺垫. 首先我们来了解下小程序的目录结构 Pages 我们新建的一些页面将保存在这个文件夹下面,每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index.js.index.

nagios3 添加Python编写的插件

Nagios 系统提供了一个插件NRPE.Nagios 通过周期性的运行它来获得远端服务器的各种状态信息.它们之间的关系如下图所示: Nagios 通过NRPE 来远端管理服务 1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务. 2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon 3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc) 4. 最后,NRPE 把检测的结果传

解析区块链商城系统开发关注度一直高的原因

区块链商城系统开发好不好,是不是专门做区块链商城软件开发的,深圳区块链商城系统源码多少钱,服务比较好 的区块链商城系统开发公司是哪家,可以上门考察体验的区块链商城APP开发团队技术怎么样,我们欢迎广大区块 链爱好者莅临本司考察,共同发展. 现在我们就分析下为何企业应该选择定制开发"区块链商城系统"; 一."区块链商城系统"多了一个营销渠道 在现在企业的营销模式中,对于微信营销不只是停留在做还不不做的问题 上,而是做的快与慢,质量好坏的问题,在同行业竞争中,对手已经定

【php】配合Ajax与Json,根据MVC思想,无插件,完美兼容IE6,编写一个获取动态系统

获取用户动态在一些论坛等社交网络中很常见,甚至可以说,就是一个微博嘛.其实这个系统很简单的,很容易就能写出来. 当然,你平时要做好准备,在你的后台数据库加一张动态表,在用户发帖.回帖等各个动作的执行时候,再加一条把用户的各个动作入库,记录到一张专门的动态表内.时刻收集好用户的动态,这样才能向用户的好友或者整个网站的用户展示好友动态. 现在举一个例子来说明,怎么编写一个获取动态系统,也就是微博. 一.基本目标 假设我们现在收集了16条用户动态在Testtable表里面,时间什么的具体数据居然有条1