TYPO3 Breadcrumb Menu一级无链接问题求助
TYPO3面包屑首页链接为空的解决方案
问题原因
使用rootline类型的MenuProcessor生成面包屑时,站点首页(根页面)的item.link字段为空字符串,导致f:uri.typolink处理空参数时输出空的href属性,触发Google搜索控制台报错。
非硬编码解决方案
方案1:TypoScript层面统一处理
修改MenuProcessor配置,为首页的空link字段自动填充站点根路径:
50 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor 50 { special = rootline includeNotInMenu = 1 as = menuBreadcrumb # 为每个菜单项处理空link itemProcFunc = TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction itemProcFunc.userFunc = function(&$item, $conf) { if (empty($item['link'])) { $site = TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Site\SiteFinder::class)->getSiteByPageId($item['uid']); $item['link'] = $site->getBase()->__toString(); } } }
或者用更简洁的stdWrap方式:
50 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor 50 { special = rootline includeNotInMenu = 1 as = menuBreadcrumb # 处理空link为站点根路径 stdWrap { split { token = | cObjNum = 1 | * 1 { current = 1 stdWrap.ifEmpty.data = site:base } } } }
方案2:Fluid模板层面处理
在模板中判断item.link是否为空,为空时输出站点绝对根路径:
<f:if condition="{menuBreadcrumb}"> <nav> <ol itemscope itemtype="https://schema.org/BreadcrumbList"> <f:for each="{menuBreadcrumb}" as="item" iteration="iterator"> <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <a itemprop="item" href="{f:if(condition: item.link, then: '{f:uri.typolink(parameter: item.link, absolute: 1)}', else: '{f:uri.site(absolute: 1)}')}"> <span itemprop="name">{item.title}</span> </a> <meta itemprop="position" content="{iterator.cycle}" /> </li> </f:for> </ol> </nav> </f:if>
也可以用null合并运算符简化写法:
<a itemprop="item" href="{item.link -> f:uri.typolink(absolute: 1) ?: f:uri.site(absolute: 1)}">
验证效果
修改后,面包屑首页的href会自动生成为站点的绝对根路径(如https://your-domain.com/),符合Google搜索控制台的链接有效性要求,不会再触发报错。
内容的提问来源于stack exchange,提问作者t3fan
相关产品推荐
相关产品推荐

