2010-03-01 8 views
6

Die Standardmethode URLs in Grails schaffen wird:Grails SEO-freundliche URLs

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

, die die URL erzeugt: /news/show/102

Ich will mehr SEO-freundliche URLs wie:

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

Was ist der sauberste Weg, dies in Grails zu tun? Ich könnte Grails URLMapping verwenden, um /news/show/102 zu /news/102 zu mappen, aber wie erstelle ich die vollständige URL wie oben?

Antwort

15

Man könnte die Schlagzeile in einen Parameter wie folgt drehen:

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

diese Weise können Sie Ihre Urls mit der Schlagzeile in ihnen und der Zuordnung funktionieren würde noch schaffen könnte. Sie müssen natürlich nicht den Überschriftenparameter verwenden, der in Ihrem Controller erscheint. Das obige Beispiel verwendet eine benannte URL-Zuordnung, so dass Sie dann sagen:

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

Sie auch für die Erstellung von kanonischen URLs in diesem Plugin interessiert sein - http://www.grails.org/plugin/canonical

+0

+1. Das Mapping-Argument war das, was ich brauchte. Vielen Dank. – Langali

+0

Dave danke! Diese Methode ist sehr praktisch für Websites mit mehreren Sprachen, in denen Sie je nach aktuellem Gebietsschema einen bestimmten Mapper auswählen können. In meinem Beispiel habe ich story-en und story-hr-Mappings und in meinem g: link nutze ich mapping: "story - $ {locale}", welches den richtigen Mapper für das ausgewählte Gebietsschema auswählt. –