Могут ли макеты выбирать контроллеры Grails? - PullRequest
5 голосов
/ 08 апреля 2010

Я создаю CMS как учебное упражнение в Grails и хотел бы дать менеджерам контента возможность выбирать между различными структурами HTML-страниц (например, 2 столбца, 3 столбца и т. Д.).

Макеты Grails кажутся логичным выбором, но возможно ли для контроллера Grails явно указать, какой макет будет использоваться для рендеринга? В идеале, для Ruby on Rails должна быть опция layout для метода render, но я не вижу ничего подобного.

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

Есть идеи?

Ответы [ 4 ]

5 голосов
/ 08 апреля 2010

Почему бы просто не передать его в модель и не отобразить его в метатеге, который определяет макет?

<meta name="layout" content="${myValueFromController}"/>

Я не пробовал, но думаю, что это сработает.

3 голосов
/ 08 апреля 2010

Я не знаю, как сделать это за действие, но вы можете указать его на уровне контроллера, например,

class FooController {

   static layout = 'cms'

   def index = {}
   def foo = { ... }
   def bar = { ... }
}
2 голосов
/ 02 декабря 2010

Может быть, я что-то упускаю, но разве это не может быть легко решено с небольшой любовью taglib?определить, к какой вкладке должен быть применен «выбранный» класс в моих макетах.Это позволяет мне сохранять все мои навигационные html внутри макета, при этом получая подсветку.Немного отличается от того, что вы просите, но кажется, что это может ( возможно? ) все еще работать ...

2 голосов
/ 08 апреля 2010

Эй, я думаю, у меня есть решение для тебя: Просто используйте идею Теда Нейлида в сочетании с afterInterceptor вашего контроллера:

foo.gsp:

<meta name="layout" content="${actionLayout}" />

FooController.groovy:

class FooController {

  def index = { 
    // do awesome stuff
  }

  def afterInterceptor = { model ->
    model.actionLayout = actionName}
  }
}

Единственное, что вам нужно сделать сейчас, это назвать ваши макеты как ваши действия или создать какую-то другую логику именования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...