nopcommerce插件深度剖析


nopcommerce插件機制是相當優秀的,所以就分析一下然后拿來所用,集成到自己的網站架構里。寫篇小文記錄一下。不足和錯誤之處還望指正,nop版本2.5

1.Nop.Core.Plugins核心文件夾

文件目錄:

 

這里面是Plugins的基類文件夾,實現插件機制的核心部分。

IPluginFinder.cs接口:

獲取插件的信息接口,在ioc里的Nop.Web.Framework.DependencyRegistrar注冊此接口。

系統啟動的時候會加載到內存里。

//plugins
builder.RegisterType<PluginFinder>().As<IPluginFinder>().InstancePerHttpRequest();

 IPlugin.cs:

插件的操作接口,主要有設置插件的屬性信息,安裝插件接口,卸載插件接口。

BasePlugins.cs 實現IPlugin.cs的方法。

PluginDescriptor.cs  插件的實體類,包含了插件的版本、描述,類型,文件名稱,作者,等等一系列狀態。

PluginFileParser。cs 包含對插件的實體操作方法,主要是寫入插件的描述信息。

PluginFinder.cs 加載所有的插件,並獲取它們的信息.

PluginManager.cs 插件管理的主類,看里面的注釋,它的插件機制應該是參考的Umbraco這個cms的。

2.自定義插件

在這里我演示一個空的插件,本來是寫抓取程序的,時間關系,沒有做 了。插件名稱,Nop.Plugin.Crawler

第一步:新建一個類庫項目,而不是mvc應用項目。

第二步:在你的項目里添加需要的文件夾和文件:

Controllers,必選,控制器

Models,可選,如果你的項目很簡單的話。

Views,可選但是一般情況下都需要有個界面的,放razor模板的.

Description.txt,這個必須要,插件的版本描述信息。內容如下

Group: Crawler
FriendlyName:Crawler
SystemName: Nop.Plugin.Crawler
Version: 1.00
SupportedVersions: 2.50
Author: nopCommerce team
DisplayOrder: 1
FileName: Nop.Plugin.Crawler.dll

在它上面點右鍵設置屬性,如下圖

 

 

Notes.txt ,這個是插件的備注信息,描述了插件的文件位置和一些注意事項。

RouteProvider.cs,路由文件,繼承自Nop.Web.Framework.Mvc.Routes.IRouteProvider

View Code
using System.Web.Mvc;
using System.Web.Routing;
using Nop.Web.Framework.Mvc.Routes;

namespace Nop.Plugin.Crawler
{
    public partial class RouteProvider : IRouteProvider
    {
        public void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute("Nop.Plugin.Crawler",
                 "Plugins/Crawler/Index",
                 new { controller = "Crawler", action = "Index" },
                 new[] { "Nop.Plugin.Crawler.Controllers" }
            );
        }
        public int Priority
        {
            get
            {
                return 0;
            }
        }
    }
}

web.config,.net配置文件。

CrawlerController.cs 在我的控制器里定義了一個返回簡單頁面的方法。

using System.Web.Mvc;
using Nop.Web.Framework.Controllers;

namespace Nop.Plugin.Crawler.Controllers
{
    [AdminAuthorize]
    public class CrawlerController : Controller
    {
  
        public ActionResult Index()
        {

            return View("Nop.Plugin.Crawler.Views.Index");
        }
    }
}

大家注意了,返回的View里的view路徑是插件里的視圖路徑,在view的Index.cshtml點右鍵設置的屬性,cshtml是編譯到dll里的

還有整個插件的屬性,在插件項目上點右鍵設置輸出屬性

最后設置引用進來的dll文件屬性。這樣輸出dll文件的時候不會把其他亂七八糟的文件也拷貝過來了。

在插件上點右鍵生只輸出這三個文件 

3.最后一步在Nop.Web的InstalledPlugins.txt里添加插件

插件名稱不能重復,可以自定義。這里我的取的名字和插件項目名稱相同沒什么特殊要求。

 

 后台插件預覽就可以看到了。

 原文來自:http://www.jqpress.com/post/178.aspx

 獨立博客:http://www.jqpress.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM