你們造在目前的nopCommerce中已經有網站地圖的功能,當你請求以下地址時,http://www.nopchina.com/SitemapSeo會顯示XML的站點地圖,但有個問題,這個是實時顯示的。站點地圖其實不用實時,這個你懂的,因而咱們要作的是讓它定時生成一個靜態的XML文件就好,不須要實時生成以節約服務器資源。php
如何實現web
製做一個nop插件,經過nopCommerce的計劃任務來實現定時生成。插件項目以下:服務器
代碼能夠在此下載:Sea.Plugin.Job.SitemapXML.zip,此處僅略爲描述主要功能:ide
插件安裝時向計劃任務添加一條記錄:網站
public override void Install() {ui
//install a schedule taskspa
var task = FindScheduledTask();插件
if (task == null)code
{xml
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");
}