2010-03-01 5 views
6

La méthode standard de création d'URL dans Grails est:Grails URL SEO friendly

<a href="${createLink(controller:'news', action: 'show', params: [id: news.id])}">${news.title}</a> 

qui génère l'URL: /news/show/102

Je veux plus d'URL SEO friendly comme:

/news/102/this-is-the-hottest-news-today 

Qu'est-ce que est le moyen le plus propre de le faire dans Grails? Je pourrais utiliser grails URLMapping pour mapper /news/show/102 à /news/102, mais comment puis-je créer l'URL complète comme ci-dessus?

Répondre

15

Vous pouvez transformer le titre en un paramètre comme celui-ci:

name story: "/news/$id/$headline" { 
    controller = "news" 
    action = "show" 
} 

De cette façon, vous pouvez créer vos urls avec le titre en eux et la cartographie fonctionne encore. Vous n'avez bien sûr pas besoin d'utiliser le paramètre headline qui apparaîtra dans votre contrôleur. L'exemple ci-dessus utilise un mappage d'URL nommé afin que vous pouvez dire:

${createLink(mapping: "story", params: [id: 102, headline: 'this-is-the-hottest-news-today'])} 

Vous pouvez également être intéressé par ce plugin pour créer des urls canoniques - http://www.grails.org/plugin/canonical

+0

+1. L'argument de 'mapping' était ce dont j'avais besoin. Merci. – Langali

+0

Dave merci! Cette méthode est très pratique pour les sites multilingues, où vous pouvez cibler un mappeur particulier en fonction des paramètres régionaux actuels. Dans mon exemple, j'ai des mappages story-en et story-hr et dans mon g: link j'utilise mapping: "story - $ {locale}" qui sélectionne le mappeur approprié pour les paramètres régionaux sélectionnés. –