Проблема в том, что вы не знаете, какой из способов является лучшим для запуска различных шаблонов в Grails.
Я пытаюсь жестко запрограммировать меню, но по-прежнему есть разные меню для разных областей. Лично я считаю ненужным выполнение запросов к базе данных при создании меню.
Быстрый просмотр фрагмента и сценария. subnav - это динамическое меню.
<body>
<div id='navigation'>
Main menu list
</div>
<div id='subnav'>
Render grails template base on path
e.g. http://www.example.com/cars/ford => render ${ford} menu template
http://www.example.com/cars/toyota => render ${toyota} menu template
</div>
</body>
Теперь рендеринг шаблона - это простая часть, поскольку я мог бы просто использовать переменную, которая следует за именем шаблона. например <g:render template="/layouts/${submenu-name}"/>
В чем я не уверен, так это в том, как лучше всего установить эту переменную. (добрые / злые практики)
Использую ли я фильтр и перебираю url / uri, чтобы узнать свое местоположение, ИЛИ я устанавливаю его каждый раз в контроллере, когда это необходимо, ИЛИ использую то, о чем я не думал?
Спасибо
EDIT:
Не уверен, что это лучшая практика, но, скажем, у меня есть "шаблон автомобиля" и "шаблон мотоцикла", тогда я просто использую фильтр, чтобы изменить модель, прежде чем вид дойдет до нее.
* 1023 Е.Г. *
def filters = {
car(uri:'/car/*') {
after = { model -> model.menuTpl = 'car' }
}
bike(uri:'/bike/*') {
after = { model -> model.menuTpl = 'bike' }
}
А потом на главном экране:
<g:render template="/layouts/${menuTpl}" />