在 Grails GSP 布局中使用其他布局
Using other layouts inside a Grails GSP layout
我有一个 Grails 2.4.x 应用程序,其中约 80% 的页面使用 simple.gsp
布局,而其他页面都是不使用任何 layout/templating 根本。但他们不能使用 simple.gsp
,因为它的内容不适用于他们。
我需要向所有这些页面添加 header 导航 (100%),并且想要一个优雅的解决方案。理想情况下,我可以创建一个包含 header 导航的新布局,例如 awesome-header.gsp
。那么:
- 对于任何 不 使用
simple.gsp
布局的页面(同样,~20%),我会让它们直接使用 awesome-header.gsp
;但后来...
- 我会以某种方式 reference/import/extend
simple.gsp
(以某种方式)使用 awesome-header.gsp
;现在允许其他 ~80% 的页面使用新的 header 导航
假设这是 simple.gsp
:
<!DOCTYPE html>
<html>
<head>
<title>
<g:layoutTitle default="Some App" />
</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Lots of stuff -->
<g:layoutHead />
<!-- Lots of stuff -->
</head>
<body>
<!-- Lots of stuff -->
<div id="page-content">
<g:layoutBody />
</div>
<!-- Lots of stuff -->
</body>
</html>
让我们假设这是 awesome-header.gsp
:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title></title>
</head>
<body>
<script id="awesome-header-bootstrap" src="/awesome-header/awesome-header-bootstrap-1.0.js"><script>
<g:layoutBody />
</body>
</html>
准系统。我需要这个 awesome-header.gsp
布局做的就是在 <body>
元素的顶部包含一个 JS。出于这个问题的目的,这个 JS 脚本是 "magic" 并为我神奇地获取 header 导航。
- reference/import/extend
simple.gsp
如何使用awesome-header.gsp
?
- 我不希望
awesome-header.gsp
覆盖任何 title
或 header
内容(在 simple.gsp
或任何掉队页面中定义)
关于如何完成此设置的任何想法?
如果我很好理解,你想要一个介于 simple.gsp 和 awesome-header.gsp 之间的层次结构。所以你可以看看这个 link 来帮助你做到这一点。
另一种解决方案可能更简单,因为不需要做很多修改,那就是使用模板:
- 将与 awesome-header 相关的所有 HTML / JS 代码放入模板中(比如说 _awesome-header.gsp,'_'很重要!)
- 只需将该行放入您的 'simple' 布局和未连接到您的 'simple' 布局的所有其他页面内:
<g:render template='awesome-header'/>
我有一个 Grails 2.4.x 应用程序,其中约 80% 的页面使用 simple.gsp
布局,而其他页面都是不使用任何 layout/templating 根本。但他们不能使用 simple.gsp
,因为它的内容不适用于他们。
我需要向所有这些页面添加 header 导航 (100%),并且想要一个优雅的解决方案。理想情况下,我可以创建一个包含 header 导航的新布局,例如 awesome-header.gsp
。那么:
- 对于任何 不 使用
simple.gsp
布局的页面(同样,~20%),我会让它们直接使用awesome-header.gsp
;但后来... - 我会以某种方式 reference/import/extend
simple.gsp
(以某种方式)使用awesome-header.gsp
;现在允许其他 ~80% 的页面使用新的 header 导航
假设这是 simple.gsp
:
<!DOCTYPE html>
<html>
<head>
<title>
<g:layoutTitle default="Some App" />
</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Lots of stuff -->
<g:layoutHead />
<!-- Lots of stuff -->
</head>
<body>
<!-- Lots of stuff -->
<div id="page-content">
<g:layoutBody />
</div>
<!-- Lots of stuff -->
</body>
</html>
让我们假设这是 awesome-header.gsp
:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title></title>
</head>
<body>
<script id="awesome-header-bootstrap" src="/awesome-header/awesome-header-bootstrap-1.0.js"><script>
<g:layoutBody />
</body>
</html>
准系统。我需要这个 awesome-header.gsp
布局做的就是在 <body>
元素的顶部包含一个 JS。出于这个问题的目的,这个 JS 脚本是 "magic" 并为我神奇地获取 header 导航。
- reference/import/extend
simple.gsp
如何使用awesome-header.gsp
? - 我不希望
awesome-header.gsp
覆盖任何title
或header
内容(在simple.gsp
或任何掉队页面中定义)
关于如何完成此设置的任何想法?
如果我很好理解,你想要一个介于 simple.gsp 和 awesome-header.gsp 之间的层次结构。所以你可以看看这个 link 来帮助你做到这一点。
另一种解决方案可能更简单,因为不需要做很多修改,那就是使用模板:
- 将与 awesome-header 相关的所有 HTML / JS 代码放入模板中(比如说 _awesome-header.gsp,'_'很重要!)
- 只需将该行放入您的 'simple' 布局和未连接到您的 'simple' 布局的所有其他页面内:
<g:render template='awesome-header'/>