如何使用 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>