Есть ли хорошие руководства по использованию sitemesh в приложении Grails?

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

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

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

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

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

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

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

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


person Ted Naleid    schedule 04.12.2008    source источник


Ответы (4)


Что ж, могу немного ответить:

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

Ваша конечная страница должна иметь метатег, как вы предлагаете, но если вы хотите наложить макет поверх другого макета, вы помещаете тег g: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, поэтому я не могу привести вам лучшие примеры, извините.

person billjamesdev    schedule 05.12.2008
comment
Это должно натолкнуть вас на пример Grails Goodness — Применение макетов в макетах - person npiv; 04.04.2011

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

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

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

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

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

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

person Community    schedule 28.05.2009
comment
Боже мой, это точный ответ на мою проблему, дело здесь в использовании «страницы». В имени pageProperty. +1000 - person fixitagain; 12.11.2012
comment
Я нигде не видел этого документально. Я выбираю Grails, так как на многих сайтах указано, что он хорошо документирован... Пока нет моего опыта.. - person SandorRacz; 02.06.2014

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

/view/layout/inline-error-message.gsp

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

/views/book/create.gsp

<%-- let's decorate our error message with some fancy box --%>
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>
person igor    schedule 28.02.2011
comment
Это то же самое, что и шаблоны с g:render. Есть ли разница? - person Tomasz Kalkosiński; 29.11.2011
comment
Эта реализация намного чище, если у вас буквально сотни шаблонов. Вы же не хотите, чтобы у вас были сотни g:renders и множество свойств в ${quotes}. Это легче читать и поддерживать. Для небольшого веб-сайта это не имеет значения. - person igor; 01.11.2012

Посмотрите наше приложение Rabbtor Showcase, где вы найдете несколько очень хороших примеров

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

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

person Cagatay Kalan    schedule 15.06.2016