You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Grav的Twig模板中单独获取页面的标题、副标题、子副标题

刚好做过类似的Grav模板定制,给你一套靠谱的解决方案:

在Grav Twig模板中获取自定义标题层级的方法

第一步:在页面Markdown文件中规范定义标题字段

首先确保每个页面的frontmatter(.md文件顶部的YAML配置块)里,用固定字段名声明三个标题:

---
title: "我的主标题"
subtitle: "这是副标题"
subsubtitle: "最底层的子副标题"
---

// 页面正文内容...

这里title是Grav默认支持的字段,subtitlesubsubtitle是我们自定义的固定字段名,只要后续不修改这些字段名,模板就能稳定读取。

第二步:在Twig模板中安全调用字段值

在你的Twig模板(比如templates/page.html.twig或自定义模板文件)中,通过page.header对象访问这些字段。为了避免空字段输出破坏布局,建议加上存在性判断:

<!-- 页面标题区域 -->
<div class="page-header-group">
  <h1 class="main-title">{{ page.header.title }}</h1>
  
  {% if page.header.subtitle %}
    <h2 class="sub-title">{{ page.header.subtitle }}</h2>
  {% endif %}
  
  {% if page.header.subsubtitle %}
    <h3 class="sub-sub-title">{{ page.header.subsubtitle }}</h3>
  {% endif %}
</div>

这样只有当页面填写了对应字段时,模板才会渲染对应的标签,不会出现空的标题元素。

第三步:(可选)让Admin后台支持可视化编辑

如果你用Grav Admin插件管理页面,默认没有subtitlesubsubtitle的输入框,可以通过自定义页面蓝图添加这些字段,让用户在后台直接填写:

  1. user/blueprints/pages/目录下创建或修改蓝图文件(比如default.yaml
  2. 添加字段配置:
title: Default Page
form:
  fields:
    tabs:
      fields:
        content:
          fields:
            # 保留默认主标题字段
            header.title:
              type: text
              label: Main Title
              validate:
                required: true
            # 添加副标题字段
            header.subtitle:
              type: text
              label: Subtitle
            # 添加子副标题字段
            header.subsubtitle:
              type: text
              label: Subsubtitle

保存后,Admin后台编辑页面时就会出现这两个字段的输入框,用户无需手动编写YAML。

核心优势

这种方案完全匹配你的需求:不管后续页面内容结构怎么调整(比如正文添加模块、修改布局),只要用户保持titlesubtitlesubsubtitle这三个字段名不变,模板就能自动读取并渲染标题,无需修改模板代码。

内容的提问来源于stack exchange,提问作者M.E.

火山引擎 最新活动