胸腺应用不同的标题样式

问题描述 投票:0回答:1

我正在使用thymeleaf page layouts的最新版本。

我想对所有页面使用标题模式$CONTENT_TITLE - $LAYOUT_TITLE。因此,我创建了以下布局和内容文件。

我的layout.html文件看起来像

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.w3.org/1999/xhtml">
<head>
    <title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">My Company Name</title>
    <!-- some scripts and styles --->
</head>
<body>
    <!-- some content --->
</body>
</html>

我的content.html看起来像

<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.thymeleaf.org"
      layout:decorate="~{layout.html}">
<head>
    <title>
        <th:block th:if="${meta.pageTitle}" th:text="${meta.pageTitle}"></th:block>
    </title>
</head>
<body>
    <!-- some content --->
</body>
</html>

[如果内容页面获得Newsletter作为属性pageTitle的值,并且在浏览器中调用了内容页面,则会得到正确的结果:

<title>Newsletter - My Company Name</title>

如果我的内容页面没有标题,我只想在我的$LAYOUT_TITLE标记中显示<title>,而没有前导分隔符-。但是,通过我的代码,我得到

<title>- My Company Name</title>

我想要的是

<title>My Company Name</title>

我如何以简单的方式实现这一目标?据我所知,我无法在layout.html中使用$CONTENT_TITLE并检查其是否为空,或者可以吗?

java html spring spring-mvc thymeleaf
1个回答
0
投票

因为我找不到一种使用标题模式的条件的方法,所以我从此移开了,并使用了this answer中建议的可参数化的片段。

layout.html

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.w3.org/1999/xhtml">
<head>
    <!-- some scripts and styles --->
</head>
<body>
    <!-- some content --->
</body>
</html>

content.html

<!doctype html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.thymeleaf.org"
      layout:decorate="~{layout.html}">

<head>
    <th:block th:replace="./fragments/page-title.html :: page-title('My Content Title')"></th:block>
</head>

<body>
    <!-- some content --->
</body>
</html>

./fragments/page-title.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:fragment="page-title(pageTitle)" th:remove="tag">
    <title th:text="(${pageTitle}? ${pageTitle} + ' - ' : '') + 'My Company Name'"></title>
</head>
</html>

这导致<title>My Content Title - My Company Name</title>用于所有带有附加标题的页面,<title>My Company Name</title>用于所有没有附加标题的页面(例如我的起始页)。

© www.soinside.com 2019 - 2024. All rights reserved.