表告诉我说你不知道nopCommerce是什么。它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了。代码目前托管在codeplex上,有兴趣的同学可以猛戳他们的codeplex站点http://nopcommerce.codeplex.com/
 
目的和效果

大家造在目前的nopCommerce中已经有网站地图的功能,当你请求如下地址时,http://www.nopchina.com/SitemapSeo会显示XML的站点地图,但有个问题,这个是实时显示的。站点地图其实不用实时,这个你懂的,于是我们要做的是让它定时生成一个静态的XML文件就好,不需要实时生成以节约服务器资源。

做好以后放到插件中如下:

如何实现

制作一个nop插件,通过nopCommerce的计划任务来实现定时生成。插件项目如下:

代码可以在此下载:Sea.Plugin.Job.SitemapXML.zip,此处仅略为描述主要功能:

插件安装时向计划任务添加一条记录:

public override void Install()        {

//install a schedule task

var task = FindScheduledTask();

if (task == null)

{

task = new ScheduleTask

{

Name = "[SEA] sitemap.xml Generator",

//everyday

Seconds = 3600*24,

//Seconds = 60,//test

Type = "Sea.Plugin.Job.SitemapXML.SiteMapGenerationTask, Sea.Plugin.Job.SitemapXML",

Enabled = true,

StopOnError = false,

};

_scheduleTaskService.InsertTask(task);

}

SiteMapGenerationTask currentTask = new SiteMapGenerationTask(_sitemapGenerator,_webHelper);

currentTask.Execute();

base.Install();

}

当时卸载的时候也要删除干净:

public override void Uninstall()        {

//remove the task

var task = FindScheduledTask();

if (task != null)

_scheduleTaskService.DeleteTask(task);

base.Uninstall();

}

在计划任务的execute方法中,调用现有的SEO类生成地图:

public void Execute()

{

string xml = _sitemapGenerator.Generate();

string filePath = _webHelper.MapPath("~/sitemap.xml");

File.WriteAllText(filePath, xml);

}

来数数这两个文件你要写多少行代码? :)

哦,别忘了把之前已有的Sitemap action给注释掉:

//SEO sitemap page

[NopHttpsRequirement(SslRequirement.No)]

public ActionResult SitemapSeo()

{

if (!_commonSettings.SitemapEnabled)

return RedirectToRoute("HomePage");

//string siteMap = _sitemapGenerator.Generate();

//return Content(siteMap, "text/xml");

return Redirect("/sitemap.xml");

}

只写104行代码!在nopCommerce中如何实现自动生成网站地图的更多相关文章

  1. 厉害了,Google大神每天写多少行代码?

    文章转自开源中国社区,编译自:Quora Quora上有个有趣的问题:Google工程师们每天写多少行代码? Google 的 AdMob 全栈工程师 Raymond Farias 在 Quora 发 ...

  2. 不写1行代码,在Mac上体验ASP.NET 5的最简单方法

    昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...

  3. mysql中timestamp的自动生成与更新

    转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:----------- ...

  4. Markdown 中的目录自动生成功能 TOC

    目录 Markdown 中的目录自动生成功能 TOC 1. 标题一 1.1 标题二 1.标题二 2. 标题一 2.1 标题二 2.2 标题二 Markdown 中的目录自动生成功能 TOC 1. 标题 ...

  5. JELLY技术周刊 Vol.24 -- 技术周刊 · 实现 Recoil 只需百行代码?

    蒲公英 · JELLY技术周刊 Vol.24 理解一个轮子最好的方法就是仿造一个轮子,很多框架都因此应运而生,比如面向 JS 开发者的 AI 工具 Danfo.js:参考 qiankun 的微前端框架 ...

  6. idea中mybatis generator自动生成代码配置 数据库是sqlserver

    好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generato ...

  7. 【转】Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

    Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中 ...

  8. Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

    一:项目建立好及其基本的测试好 二:在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <build> <finalName&g ...

  9. IDEA 中使用MyBatis-generator 自动生成MyBatis代码

    0.在Intellij IDEA创建maven项目 1. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <build> < ...

随机推荐

  1. (Python )控制流语句if、for、while

    这一节,我们将学习Python的控制流语句,主要包括if.for.while.break.continue 和pass语句 1. If语句 if语句也许是我们最熟悉的语句.其使用方法如下: x=inp ...

  2. LeetCode OJ-- Wildcard Matching **@

    https://oj.leetcode.com/problems/wildcard-matching/ 模拟通配符的匹配 做法非常好 class Solution { public: bool isM ...

  3. 【洛谷P3258】松鼠的新家

    很好的一道题 LCA+树上前缀和 sum数组是前缀和数组, 分类讨论一下, 1.访问到一个点p1,若下一个点p2需要往儿子下面找的话,那么lca就是这个点p1,则sum[p1]--; sum[p2]+ ...

  4. echo中的逗号

    作为一个自学PHP的小白来说,echo是用来打印字符串的,总结几种输入方式如下: $a = 'good morning'; echo $a; echo $a . 'boys'; echo " ...

  5. linux环境变量查看及修改

    例如用命令 echo $PATH 则可以查看该环境变量为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 添加环境定义一个变量 ...

  6. web大文件上传控件-jsp-oracle-bug修复-Xproer.HttpUploader6

    说明: 修复删除文件夹逻辑错误的问题   1.更新up6.js 更新前: 更新后: 代码:         , "RemoveFolder": function (fileSvr) ...

  7. 搭建Openstack云平台

    实验室需要做一个大数据平台项目,临时接下需要部署实验室云平台的任务,由于之前没有接触过相关技术,仅以此篇作为纪录文,记录一下我的openstack的初步学习以及搭建过程. 1.openstcak及其组 ...

  8. linux增加根分区大小

    以下操作以root身份运行 1.增加一个新分区(从原有硬盘分,或增加一个新硬盘并进行分区fdisk)  格式化成ext4(mkfs.ext4 /dev/sdb1,假设为/dev/sdb1) 2.将新的 ...

  9. C++混合编程之idlcpp教程Lua篇(2)

    在上一篇 C++混合编程之idlcpp教程(一) 中介绍了 idlcpp 工具的使用.现在对 idlcpp 所带的示例教程进行讲解,这里针对的 Lua 语言的例子.首先看第一个示例程序 LuaTuto ...

  10. Asp.Net Web API 2第五课——Web API路由

    Asp.Net Web API 导航   Asp.Net Web API第一课——入门 http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web ...