Лучший способ управлять меню навигации заголовка из шаблона? - PullRequest
2 голосов
/ 28 апреля 2010

Я хочу добавить навигацию в шаблон 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>

Ответы [ 5 ]

3 голосов
/ 28 августа 2012

Вместо передачи параметра вы можете использовать некоторые из них:

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

Тогда на навигационных пунктах

<g:if test="${pageId == 'book-list'}"> class="active"</g:if>
2 голосов
/ 28 апреля 2010

Обычно это делается передачей параметра, назовем его 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>

Я бы также предложил иметь контроллеров в качестве точки входа , а не GSP.

  <g:link controller="products" action="list" class="menuItem" params="[activeView:'products']">Book List</g:link>
1 голос
/ 28 апреля 2010

Мне нравится предложение Армандино, однако у вас могут возникнуть проблемы, если вы заходите на страницы другими способами, кроме щелчка по меню (например, через закладку или первую страницу после входа в систему).

Это еще одно решение, если вы используете SiteMesh, однако оно не изолировано шаблону меню и, следовательно, не так хорошо с точки зрения дизайна:

Меню навигации активной страницы Grails

1 голос
/ 28 апреля 2010

Другая идея заключается в использовании плагина навигации Grails .

0 голосов
/ 15 октября 2012

Я думаю, что pagemesh pageProperty - это элегантное и неинвазивное решение, которое полностью держит все на виду.

на конкретной странице:

<body active="home">

в шаблоне макета сайта:

<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>
...