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
相关产品推荐
相关产品推荐

