原文链接http://www.cnblogs.com/dingsea/archive/2012/03/05/2381062.html

插件(Plug-in,又叫addin、add-in、addon或add-on)是一种电脑程序,通过和应用程序的互动,用来替应用程序增加一些所需要的特定的功能。(Wikipedia)

插件用来扩展nopCommerce的功能,nopcommcer有多种类型的插件。比如支付方式中的paypal,税率供应商,配送计算方式 (UPS,USP,Fedex),小部件(live  chat功能)等等。nopCommerce本身也自带了很多不同的插件。你可以在官网上搜索是否已经有人上传了满足你需要的插件。如果没有,继续往下看。

插件结构,所用文件,所在位置

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.在项目菜单(如Nop.Plugin.DiscountRules.CustomerRoles),点击属性
b.选择生成选项卡
c.点击输出路径旁边的浏览按钮选择一个输入目录

ps:在debug和release模式下都要做此步骤。

3.下一步你就要为你的每一个插件建立一个Description.txt,此文件包含描述插件的信息。你可以从其它插件目录中拷出来。比如Nop.Plugin.DiscountRules.CustomerRoles插件的Description.txt就有如下内容:

其实所有的信息你都能看懂,不过有一些注意事项。

SystemName必须唯一。

Version字段是你插件的版本号,你可以将它设置为你喜欢的任何值。

SupportedVersions可以包含一个由逗号分隔的(确保nopCommerce当前版本包含在此列表中,否则此插件没戏)支持版本清单。

FileName是用这个格式:Nop.Plugin.{Group}.{Name}.dll(是你插件的assembly文件名)。

要确保此文件的“复制到输出目录”属性是“如果较新则复制”

4.所需的最后一个步骤是创建一个类实现IPlugin接口(Nop.Core.Plugins命名空间)。nopCommerce有 BasePlugin类已经实现了一些IPlugin方法,这样你就不用苦逼地再写一遍。

nopCommerce还提供一些从IPlugin派生特定的接口。例如,“IPaymentMethod”接口,用于创建新的付款插件,它包含了一些特定的用于付款的方法如ProcessPayment()或 GetAdditionalHandlingFee()。

nopCommerce3.3目前有以下的插件接口(不全):

IExternalAuthenticationMethod. 用来建立外部认证方法如 Facebook, Twitter, OpenID, etc.
IWidgetPlugin. 让你可以创建小部件,小部件在你网站的某些地方出现,如左边的Live chat框
IExchangeRateProvider. 用于获得货币汇率.
IDiscountRequirementRule. 允许你创建新的折扣规则比如”帐单寄到的国家必须是……“
IPaymentMethod. 用于处理支付流程的插件。
IShippingRateComputationMethod.这些插件是用于获取可用的配送方法和正确的运费。例如,UPS,UPS,FEDEX等。
ITaxProvider. 税率提供商用于获取税率。

处理请求。控制器,模型和视图。

我们现在需要做 的是创建一个控制器,模型和视图。

1、MVC控制器负责响应对一个ASP.NET MVC网站的请求。每个浏览器请求被映射到一个特定的控制器。

2、一个视图包含被发送到浏览器的HTML标记和内容。视图是相当于一个ASP.NET MVC应用程序的页面。

3、一个MVC模型包含视图或控制器以外的所有应用程序逻辑。

那么,我们可以开工了:

创建模型。新插件中加入一个Models文件夹,然后按你需要新加入一个模型类。

创建视图。在插件项目中新加一个Views文件夹,再在里边添加一个{Name}文件夹,此处{Name}是指你的插件名。然后再添加一个Configure.cshtml文件。

很重要的一点:此视图应该要注明是嵌入资源。如下图:

创建控制器。在插件项目中新加一个controller文件夹,再新加一个控制器类。

最好的命名办法是像{Group} {Name}Controller.cs这样如DiscountRulesCustomerRolesController。

在控制器里再好好地命名一个action方法用于配置。名字一般叫“Configure”。在configure方法里准备一个模型类并将其传给这个视图:Nop.Plugin.{Group}.{Name}.Views.  {Group}{Name}.Configure,即那个嵌入视图。

提示一:从其它插件项目中拷贝web.config到你项目里来,这样在做视图的时候有智能感知。智能感知即微软的自动完成亮点。

提示二:搞定以上步骤最简单的办法是直接把其它插件项目拷贝过来,然后文件和文件夹改名。

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

提示四:接下来要确保所有第三方的程序集引用的“拷贝到本地”属性设为false,这样可以减小部署包的大小。

比如DiscountRules.CustomerRoles插件的项目结构会如下图:

路由

现在我们要为插件注册相应的路由。ASP.NET路由用于把浏览器发送的请求映射成MVC控制器相应的action方法,接下来的步骤你会读到很多详细关于路由的信息。

1.  新建文件:RouteProvider.cs,它会向nopcommerce告知关于插件路由信息。比如下边的RouteProvider添加了一个 新的路由,可以通过浏览器路径http://www.yourStore.com/Plugins/DiscountRulesCustomerRoles/Configure来访问:

2.  一些特写的插件接口(像上边讲的)和“IMiscPlugin”接口有一个方法“GetConfigurationRoute”。它应该向控制器返回一个 用于插件后台配置的路由。实现你插件的“GetConfigurationRoute”方法,可以告知nopCommerce你插件的后台配置路由是什 么。如果你插件不需要后台配置,那么此方法将返回NULL,比如下边这样:

public void GetConfigurationRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues){actionName = null;controllerName = null;routeValues = null;}只要你有这个配置方法,插件安装以后你就能在Admin > Configuration > Plugins找到一个配置链接。(其实,我不知道这句话是什么意思。。。。)

处理“安装”和“卸载”方法

这是可选步骤。一些插件需要有一定的安装逻辑,比如插件要添加一些本地资源数据。在你的IPlugin实现中(大多数情况下是直接从BasePlugin类继承下来),重载以下方法:

1. Install:在插件安装时会调用此方法,你可以在此初始化任何设置,添加新的本地资源数据或添加新的数据库表(如果需要的话)

2.Uninstall:在卸载插件时会调用此方法。

重要说明:如果你重载这些方法,不要隐藏基类的实现。比如重载”Install”的时候要记得调用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找到,这个列表是在安装的时候创建的。

升级nopCommerce可能会让插件挂掉

一些插件可能在新版本的nopCommerce中挂掉无法工作。如果在升级后有问题,请删除插件再到nopCommerce官网看看是否有些版本的 插件下载。大部分的插件作者都会把他们的插件升级到新的版本,不过少数插件并不会跟随着一起升级从而不再支持新版本。不过大多数情况下,你可以打开相应的  Description.txt文件并编辑SupportedVersions字段。

The end.

 

转载于:https://www.cnblogs.com/jingshihaisu/p/3741166.html

如何编写nopCommerce插件相关推荐

  1. 使用Qt编写模块化插件式应用程序

    动态链接库技术使软件工程师们兽血沸腾,它使得应用系统(程序)可以以二进制模块的形式灵活地组建起来.比起源码级别的模块化,二进制级别的模块划分使得各模块更加独立,各模块可以分别编译和链接,模块的升级不会 ...

  2. skywalking原理_Skywalking系列博客6手把手教你编写 Skywalking 插件

    点击上方 IT牧场 ,选择 置顶或者星标技术干货每日送达! 前置知识 在正式进入编写环节之前,建议先花一点时间了解下javaagent(这是JDK 5引入的一个玩意儿,最好了解下其工作原理):另外,S ...

  3. 编写OD插件将IDA中分析出来的函数名导入到OD中

    逆向程序的时候,喜欢用IDA静态分析,用OD动态调试,如果把IDA分析出来的函数名称都导入到OD中,调试的时候就知道哪些函数不需要再看了.以前我一直用GODUP的map loader,但是有些时候感觉 ...

  4. 使用Lua编写whireshark插件

    whireshark支持Lua.C.C++编写的插件 在这里,我简单介绍如何使用Lua编写whireshark插件. 一.插件的存放位置 whireshark插件分为个人插件和全局插件,在window ...

  5. 自己编写jQuery插件之表单验证

    自己编写jQuery插件之表单验证 吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较 ...

  6. 如何编写 Nagios 插件 (http://zener.blog.51cto.com/937811/727685)

    如何编写 Nagios 插件 Nagios 的最激动人心的方面是可以轻松地编写您自己的插件,只需要了解一些简单的指导原则即可.为了管理插件,Nagios 每次在查询一个服务的状态时,产生一个子进程,并 ...

  7. maven插件编写_编写Maven插件的提示

    maven插件编写 最近,我花了很多时间为Maven编写插件或在其中工作. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使编写它们时的生活更轻松. 提示1:将任务与Mojo分开 最初,您将把moj ...

  8. 编写Maven插件的提示

    最近,我花了很多时间来编写或为Maven开发插件. 它们简单,有趣且有趣. 我以为我会分享一些技巧,使他们在编写时变得更轻松. 提示1:将任务与Mojo分开 最初,您将把mojo的所有代码放入mojo ...

  9. 编写Eclipse插件教程–第1部分

    Eclipse是三个最受欢迎的Java开发IDE之一. 其成功的原因之一是其可扩展性. 对于任何知道该怎么做并且已经做到的人来说,编写eclipse插件都可以非常轻松快捷. 不幸的是,第一次在Ecli ...

最新文章

  1. 生信分析平台方案推介,助力科研
  2. 什么是停止词stopword
  3. JBPM流程部署校验之java利用XSD校验XML
  4. 项目质量管理知识点整理和习题整理
  5. JAVA线程池的分析和使用--笔记
  6. 我的Android进阶之旅------Android MediaPlayer播放网络音频的实例--网络mp3播放器
  7. 《玩转Python轻松过二级》配套视频免费观看地址
  8. P1066 2^k进制数
  9. mysql:The total number of locks exceeds the lock table size
  10. Yc 变量的交换(C语言谭浩强第五版第二章习题4.1为例)
  11. python简单代码恶搞-python—做一个恶搞程序
  12. 计算机刷bios版本,主板刷bios的6种方法,电脑刷bios方法-
  13. 黑客攻防技术宝典浏览器实战篇
  14. 《职场动物进化手册》笔记整理
  15. mongoDB可视化工具Robo 3T
  16. AAMAS 2021 强化学习论文70篇(自整理)
  17. apk部分手机安装失败_安卓手机安装软件失败的4种常见原因和解决办法
  18. Linux ubuntu 20.04安装unrar
  19. 星际战甲服务器维护时间,星际战甲 官网:2月4日服务器维护结束公告
  20. 怎么根据快递单号批量查询物流信息?

热门文章

  1. 联机装箱问题 java_Java实现 洛谷 P1049 装箱问题
  2. 通俗易懂量子计算的原理
  3. 记录部署hue在k8s上
  4. Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)
  5. php如何防止超发,PHP+redis实现的限制抢购防止商品超发功能详解
  6. 记录之tensorflow和pytorch中的取范数归一化操作
  7. mysql更新数据 update格式和alter对比
  8. select、poll、epoll之间的区别
  9. Leetcode题库169.多数元素(c实现)
  10. nmon安装为什么重启mysql_Nmon的安装及使用