Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are there any good tutorials for using sitemesh in a grails application?

the g:pageProperty is a very powerful, but very poorly documented thing. Lets say in my layout I specify where to put some content like this:

<html>
<body>
<g:pageProperty name="page.header" />
</body>

Now in my page I can specify some content:

<content tag="header">
<!-- header -->
</content>

Sitemesh will take the content tag, regardless of actual position in the HTML of the page and place it where it needs to go in the flow of the layout.

Even better, if within my page I render a template that also specifies a content area with a tag of "header", it will overwrite the first declaration, and it will be the template's content that will be rendered in the final layout.


Well, I can answer a bit:

Your first and third questions are related, as you can't chain layouts using the meta tag.

Your final page should have a meta tag as you suggest, but if you want to layer a layout on top of another layout, you put a g:applyLayout tag at the top of the child layout, pointing at the parent.

In your edit.gsp, you'd have:

<meta name="layout" content="editTemplate" />

and in editTemplate.gsp, you'd have:

<g:applyLayout name="baseTemplate" >
<!-- the html for the editTemplate -->
</g:applyLayout>

so edit.gsp would use editTemplate.gsp, which would use baseTemplate.gsp as a base layout. You can chain those as needed.

I haven't used g:pageProperty at all, so I can't throw you better examples there, sorry.


The Sitemesh together with Grails is a very very powerful feature. The more I use it - the more I love it. You can decorate any part of our web site: you can have layout for error messages, tooltips, news lines, comments, etc, etc. Just to note that you can do even that with in your pages and have multiple levels of decoration (no <content> needed):

/view/layout/inline-error-message.gsp

<span class="errorMessageInSomeFancyBox">
    <span class="errorIcon"></span>
    <g:layoutBody />
<span>

/views/book/create.gsp

<%-- let's decorate our error message with some fancy box --%>
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>