Я создаю CMS как упражнение изучения в Grails и хотел бы дать контент-менеджерам способность выбрать между различными структурами страницы HTML (например, 2 столбца, 3 столбца, и т.д.).
Разметки Grails походят на логический выбор, но для контроллера Grails действительно ли возможно явно назвать, какое расположение будет использоваться для рендеринга? Идеально был бы a layout
опция к render
метод, на Ruby on Rails, но я не вижу ничего как он.
Кажется, что это могло бы быть возможное использование applyLayout
метод путем передачи названия расположения, но это требует, чтобы каждая страница GSP явно запросила расположение (раздражающие издержки на страницу) вместо того, чтобы использовать Расположение условно.
Какие-либо идеи?
Я не знаю способа сделать это для каждого действия, но вы можете указать это на уровне контроллера, например
class FooController {
static layout = 'cms'
def index = {}
def foo = { ... }
def bar = { ... }
}
Почему бы просто не передать его в модель и не отобразить в метатеге, определяющем макет?
<meta name="layout" content="${myValueFromController}"/>
Я не пробовал, но Я думаю, это сработает.
Эй, я думаю, у меня есть решение для вас: Просто используйте идею Теда Налейда в сочетании с afterInterceptor вашего контроллера:
foo.gsp:
<meta name="layout" content="${actionLayout}" />
FooController.groovy:
class FooController {
def index = {
// do awesome stuff
}
def afterInterceptor = { model ->
model.actionLayout = actionName}
}
}
Единственное, что вам нужно сделать сейчас, это назвать ваши макеты, как ваши действия, или создать другую логику именования.