2010-04-28 41 views
2

我期待把导航放到我的GSP模板中,并且我想在每个相应页面的导航元素上设置active类。什么是最好的方法来做到这一点?我有几个观点.gsp用一个模板,看起来像这样合并:从模板中管理标题导航菜单的最佳方法?

<div id="bd" role="main"> 
    <div role="navigation" class="yui-g"> 
     <ul id="nav"><a href="index.gsp"><li class="active">Home</li></a><a href = "products.gsp"><li>Products</li></a><a href = "contacts.gsp"><li>Contact</li></a></ul> 
    </div> 
    <g:layoutBody/> 
    </div> 

回答

1

我喜欢armandino的建议,但是如果您通过其他方式(例如通过书签或登录后的第一页)访问页面,可能会遇到问题。

这是另一种解决方案,如果你使用了SiteMesh,但是它不是孤立的菜单模板,因此,没有好的设计明智:

Grails active page navigation menu

+0

这可能是实现这一点最简单和最快捷的方式。它不能很好地扩展,但这对我来说不是问题。 – 2010-04-28 18:38:52

2

这通常是通过传递PARAM完成,姑且称之为activeView。然后在你的菜单模板,您可以检查以突出显示基于帕拉姆的值菜单项:

<g:if test="${activeView == 'products'}"> 
    <li class="menuItem active">Products</li><!-- not clickable if active --> 
</g:if> 
<g:else> 
    <li class="menuItem"><a href="products.gsp?activeView=products">Products</a></li> 
</g:else> 

我也建议有controllers as the point of entry,而不是GSP的。

<g:link controller="products" action="list" class="menuItem" params="[activeView:'products']">Book List</g:link> 
1

另一个想法是使用Grails navigation plugin

+0

+1有我的名字。 ... /有用的链接。 – 2010-04-28 18:36:52

3

不是传递一个参数,可以的使用一些其是天然存在:

<g:set var="pageId" value="${params.controller}-${params.action}"/> 

然后在NAV项

<g:if test="${pageId == 'book-list'}"> class="active"</g:if> 
0

我认为sitemesh pageProperty是一个无与伦比的解决方案,它使事物完全处于视野中。

在特定页面:

<body active="home"> 
中的sitemesh布局模板

<g:if test="${pageProperty(name: 'body.active') == 'home'}"> 
    <li class="active"><g:link uri="/">Home</g:link></li> 
</g:if> 
<g:else> 
    <li><g:link uri="/">Home</g:link></li> 
</g:else>