You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grav框架中如何通过Twig表达式获取关联页面标题?

解决Twig中通过页面链接自动获取标题的问题

嘿,我来帮你搞定这个问题!首先得搞清楚你的header.home.linkOne字段到底存的是什么——是页面的ID、slug,还是完整的URL?不同的存储方式,对应的解决方法不一样,我给你分情况说:

第一种情况:字段存的是页面ID/slug(后台选的页面)

如果你是在后台通过页面选择器设置的这个链接,那header.home.linkOne应该是页面的标识符,之前用page.find()没用大概率是调用方式不对。试试下面的代码:

如果你用的是Craft CMS

{% set targetPage = craft.app.elements.getElementByUri(header.home.linkOne) %}
<a href="{{ header.home.linkOne }}">
  {# 找到页面就显示标题,找不到就显示默认文本 #}
  {{ targetPage ? targetPage.title : '未找到页面' }}
</a>

如果你用的是Kirby

Kirby的写法更简单,直接用page()方法就行:

{% set targetPage = page(header.home.linkOne) %}
<a href="{{ header.home.linkOne }}">
  {{ targetPage ? targetPage.title : '未找到页面' }}
</a>

第二种情况:字段存的是完整URL

如果这个字段是手动输入的完整网址(比如https://你的网站.com/about-us),那得先把URL里的路径部分提取出来,再找对应的页面:

{# 拆分URL,提取出域名后的路径部分 #}
{% set urlSegments = header.home.linkOne|split('://') %}
{% set pathPart = urlSegments[1] ?? '' %}
{% set pageUri = pathPart|split('/')|slice(1)|join('/') %}

{# 用提取到的URI找页面 #}
{% set targetPage = craft.app.elements.getElementByUri(pageUri) %}
<a href="{{ header.home.linkOne }}">
  {{ targetPage ? targetPage.title : '未找到页面' }}
</a>

小技巧:先排查字段值

要是还是不行,先在模板里加一行{{ dump(header.home.linkOne) }},看看这个字段实际存的是什么内容——搞清楚它的格式,就能更快找到问题所在啦!另外如果目标页面是未发布或者有权限限制的,可能会找不到页面对象,这时候用默认文本兜底就很稳妥。

内容的提问来源于stack exchange,提问作者Dorian Bollinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:45