大家造在目前的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");
}