如何使用 Thymeleaf 和布局重用标题标签?
How to reuse a title tag using Thymeleaf with layout?
如何更改布局以在其他标签上重用模板中的相同标题文本,避免重复模板文件中的文本?参见示例:
具有此布局:
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title>Title from LAYOUT</title>
</head>
<body>
<h1>Title from LAYOUT</title>
<th:block layout:fragment="content">Default content</th:block>
</body>
</html>
还有这个模板:
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout">
<head>
<title>Title from TEMPLATE</title>
</head>
<body>
<th:block layout:fragment="content"><p>My content</p></th:block>
</body>
</html>
需要呈现的页面是:
<html>
<head>
<meta charset="UTF-8">
<title>Title from TEMPLATE</title>
</head>
<body>
<h1>Title from TEMPLATE</title>
<p>My content</p>
</body>
</html>
你不应该在同一页面上有 2 个多个(HTML & Head & Body & Title)标签,你应该删除其中一个并将所有内容都放在一个 Body 中,
这样做需要的不仅仅是 HTML/CSS。我将在 PHP(一种服务器端语言)中提供示例,但请注意,您可以使用 Javascript 或任何其他编译脚本网络语言,例如 python、pearl、Ruby 在 rails(可能以前从未使用过)、JSP(Java 服务器端页面)以及更多...所以这里是可以回答您问题的代码,如果您有PHP 安装在您的服务器上。 :)
<?php $myTitle = "This is my title!"; ?>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title><?php echo $myTitle; ?></title>
</head>
<body>
<h1><?php echo $myTitle; ?></title>
<th:block layout:fragment="content">Default content</th:block>
</body>
这里发生了什么?在第 1 行的 PHP 中,您声明一个变量等于一段文本...在您的 html 中,行:您执行一点 PHP 以输出任何内容在那个变量 $myTitle 中。 PHP 在服务器上执行,不会发送给查看该页面的用户,因此如果您在任何网站上查找,您都找不到它...
我找到了在 h1
中添加片段块并将其包含在标题元素中的 layout:include="this :: title"
属性 的解决方案。
布局:
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title layout:include="this :: title">Title from LAYOUT</title>
</head>
<body>
<h1><th:block layout:fragment="title">Title from LAYOUT</th:block></h1>
<th:block layout:fragment="content">Default content</th:block>
</body>
</html>
模板:
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout">
<th:block layout:fragment="title">Title from TEMPLATE</th:block>
<th:block layout:fragment="content"><p>My content</p></th:block>
</html>
如何更改布局以在其他标签上重用模板中的相同标题文本,避免重复模板文件中的文本?参见示例:
具有此布局:
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title>Title from LAYOUT</title>
</head>
<body>
<h1>Title from LAYOUT</title>
<th:block layout:fragment="content">Default content</th:block>
</body>
</html>
还有这个模板:
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout">
<head>
<title>Title from TEMPLATE</title>
</head>
<body>
<th:block layout:fragment="content"><p>My content</p></th:block>
</body>
</html>
需要呈现的页面是:
<html>
<head>
<meta charset="UTF-8">
<title>Title from TEMPLATE</title>
</head>
<body>
<h1>Title from TEMPLATE</title>
<p>My content</p>
</body>
</html>
你不应该在同一页面上有 2 个多个(HTML & Head & Body & Title)标签,你应该删除其中一个并将所有内容都放在一个 Body 中,
这样做需要的不仅仅是 HTML/CSS。我将在 PHP(一种服务器端语言)中提供示例,但请注意,您可以使用 Javascript 或任何其他编译脚本网络语言,例如 python、pearl、Ruby 在 rails(可能以前从未使用过)、JSP(Java 服务器端页面)以及更多...所以这里是可以回答您问题的代码,如果您有PHP 安装在您的服务器上。 :)
<?php $myTitle = "This is my title!"; ?>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title><?php echo $myTitle; ?></title>
</head>
<body>
<h1><?php echo $myTitle; ?></title>
<th:block layout:fragment="content">Default content</th:block>
</body>
这里发生了什么?在第 1 行的 PHP 中,您声明一个变量等于一段文本...在您的 html 中,行:您执行一点 PHP 以输出任何内容在那个变量 $myTitle 中。 PHP 在服务器上执行,不会发送给查看该页面的用户,因此如果您在任何网站上查找,您都找不到它...
我找到了在 h1
中添加片段块并将其包含在标题元素中的 layout:include="this :: title"
属性 的解决方案。
布局:
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title layout:include="this :: title">Title from LAYOUT</title>
</head>
<body>
<h1><th:block layout:fragment="title">Title from LAYOUT</th:block></h1>
<th:block layout:fragment="content">Default content</th:block>
</body>
</html>
模板:
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout">
<th:block layout:fragment="title">Title from TEMPLATE</th:block>
<th:block layout:fragment="content"><p>My content</p></th:block>
</html>