2010-09-20 43 views
7

我想弄清楚为Grails应用程序生成XML站点地图(如此处所述:http://www.sitemaps.org/)的最佳方法。我不知道任何现有的插件可以做到这一点,所以我可以建立一个插件。但是,我想先获得社群的意见。除了支持标准控制器/操作之外,我认为支持内容驱动的应用程序以及可能基于标题属性生成URL的情况是很好的。Grails中的XML站点地图

你们会怎么做呢?你会考虑什么?你将如何实现它?

谢谢!

回答

16

Sitemaps对于每个应用都非常具体,所以我不确定是否有足够的通用代码提取到插件。

以下是我们如何生成http://www.shareyourlove.com的站点地图。正如你可以看到它是相当小和DRY由于Groovy中/ Grails的真好XML语法

class SitemapController{ 

     def sitemap = { 
      render(contentType: 'text/xml', encoding: 'UTF-8') { 
       mkp.yieldUnescaped '<?xml version="1.0" encoding="UTF-8"?>' 
       urlset(xmlns: "http://www.sitemaps.org/schemas/sitemap/0.9", 
         'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance", 
         'xsi:schemaLocation': "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd") { 
        url { 
         loc(g.createLink(absolute: true, controller: 'home', action: 'view')) 
         changefreq('hourly') 
         priority(1.0) 
        } 
        //more static pages here 
        ... 
        //add some dynamic entries 
        SomeDomain.list().each {domain-> 
        url { 
         loc(g.createLink(absolute: true, controller: 'some', action: 'view', id: domain.id)) 
         changefreq('hourly') 
         priority(0.8) 
        } 
       } 
      } 
    } 

URL映射

class UrlMappings { 
    static mappings = { 

     "/sitemap"{ 
      controller = 'sitemap' 
      action = 'sitemap' 
     } 
    } 
} 
+0

啊,所以你正在构建对飞? – RyanLynch 2010-09-20 02:47:18

+0

是的,由于动态部分和事实,它没有受到很多打击,所以我们没有执行任何缓存(但这不会很难)。 – leebutts 2010-09-20 03:29:09

+0

你可以请显示这个控制器的网址映射吗? – 2012-02-08 13:59:34