Есть ли хорошие уроки для использования sitemesh в приложении Grails? - PullRequest
40 голосов
/ 04 декабря 2008

Я довольно опытный разработчик Grails, но большая часть моего опыта была связана с использованием grails для предоставления JSON / XML для гибкого приложения и некоторых относительно простых HTML-сайтов.

Я углубился в использование интеграции Sitemesh в Grails, и я изо всех сил пытаюсь найти лучшие практики для более сложных конфигураций, и мне любопытно, есть ли какие-нибудь хорошие учебники или примеры там. оригинальный сайт Sitemesh не так полезен, так как теги, о которых он говорит, не отображаются напрямую в grails.

В поиске Google в основном показываются старые сообщения в списке рассылки и некоторые ванильные материалы с сайтами, которые помогают мне продвинуться немного дальше, но это много проб и ошибок.

Я полностью понимаю, как работают основные теги g: layoutTitle, g: layoutHead и g: layoutBody. Это легко и хорошо документировано.

Виды вещей, для которых я хотел бы видеть примеры:

  • g: applyLayout - документация по этому слабая, и я не до конца понимаю использование, предложенное в основных документах. Чем это отличается от установки свойства meta name='layout' content='foo'?

  • g: pageProperty - несколько лучших примеров того, как извлекать и использовать свойства в основном шаблоне, устанавливая значения в качестве метатегов на оформляемой странице. Документы grails на pageProperty показывают только атрибут onload из тела, которое переносится вперед. Я думаю, что вы также можете использовать значения метатегов здесь, что-нибудь еще?

  • можете ли вы использовать несколько уровней макетов сайтов? Мои тесты, кажется, заставляют меня думать, что я не могу, но это, кажется, уменьшает возможность повторного использования. Я думаю, что ответом здесь является использование g: applyLayout, но я больше всего с этим борюсь.

Ответы [ 4 ]

27 голосов
/ 28 мая 2009

g: pageProperty - очень мощная, но очень плохо документированная вещь. Допустим, в моем макете я указываю, где разместить такой контент:

<html>
<body>
<g:pageProperty name="page.header" />
</body>

Теперь на своей странице я могу указать контент:

<content tag="header">
<!-- header -->
</content>

Sitemesh возьмет тег содержимого независимо от фактического положения в HTML-коде страницы и разместит его там, где он должен идти в потоке макета.

Еще лучше, если на моей странице я отобразлю шаблон, который также указывает область содержимого с тегом «заголовок», он перезапишет первое объявление, и это будет содержимое шаблона, которое будет отображаться в окончательном макете. .

14 голосов
/ 05 декабря 2008

Ну, я могу ответить немного:

Ваш первый и третий вопросы связаны, так как вы не можете связать макеты с помощью метатега.

Ваша последняя страница должна иметь метатег, как вы предлагаете, но если вы хотите наложить макет поверх другого макета, вы помещаете тег ag: applyLayout вверху дочернего макета, указывая на родительский. *

В вашем файле edit.gsp вы должны иметь:

<meta name="layout" content="editTemplate" />

и в editTemplate.gsp вы получите:

<g:applyLayout name="baseTemplate" >
<!-- the html for the editTemplate -->
</g:applyLayout>

, поэтому edit.gsp будет использовать editTemplate.gsp, который будет использовать baseTemplate.gsp в качестве базового макета. Вы можете связать их по мере необходимости.

Я вообще не использовал g: pageProperty, поэтому я не могу привести вам лучшие примеры, извините.

4 голосов
/ 28 февраля 2011

Sitemesh вместе с Grails - очень очень мощная функция. Чем больше я это использую - тем больше я люблю это. Вы можете украсить любую часть нашего веб-сайта: вы можете иметь макет для сообщений об ошибках, всплывающих подсказок, новостных лент, комментариев и т. Д. И т. Д. Просто отметим, что вы можете делать это даже на своих страницах и иметь несколько уровней оформления (нет необходимо):

/ вид / макет / рядный ошибок message.gsp

<span class="errorMessageInSomeFancyBox">
    <span class="errorIcon"></span>
    <g:layoutBody />
<span>

/ просмотров / книга / create.gsp

<%-- let's decorate our error message with some fancy box --%>
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>
0 голосов
/ 15 июня 2016

См. Наше приложение Rabbtor Showcase , где приведено несколько очень хороших примеров по

  • создание вложенных макетов
  • шаблоны рендеринга
  • применение макетов к определенным частям страницы

. Это приложение на самом деле является демонстрацией нашего инструмента Rabbtor, который позволяет использовать GSP вне Grails, но части, связанные с Sitmesh, также применимы для Grails.

...