nopCommerce
插件(
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.
在项目菜单,点击属性
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" },
nopcommerce使用数量无限。nopCommerce允许用户向其商店中添加无限数量的产品,随着产品数量和网站规模的壮大,其对网站整体性能的负面影响也就逐渐显现。nopcommerce是国外的一个高质量的开源B2C网站系统,最新版4.3基于EntityFrameworkCore和.NETCore3.1,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基于xml的多语言版本,非常灵活的语言切换功能。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)