TYPO3 11.5.12导航栏如何动态链接所有站点的子页面
TYPO3 11 多站点跨域导航实现方案
默认MenuProcessor仅读取当前站点根节点下的页面,不需要创建父级站点收纳子站点,按以下两步修改即可实现全站点导航链接输出:
1. 修改setup.typoscript配置
找到配置中dataProcessing节点下你预留的代码位置,保留原有当前站点菜单配置,新增全站点菜单处理器:
dataProcessing { 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor 10 { references.fieldName = media } // 原有当前站点主菜单配置保持不变 20 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor 20 { levels = 2 includeSpacer = 1 as = mainnavigation } // 新增:拉取全实例所有站点的页面数据 30 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor 30 { entryLevel = 0 special = rootline special.value = 0 levels = 2 includeSpacer = 1 excludeDoktypes = 6,7,254,255 as = allSitesNavigation } }
- 配置中
special.value = 0代表从TYPO3实例最顶层节点(pid=0)开始读取页面,如果你的多站点根页面统一挂载在某个公共目录页下,将该值改为对应目录页的ID即可 excludeDoktypes会自动过滤后端用户页、回收站、系统文件夹、快捷方式这类不需要前台展示的页面类型
2. 修改导航栏Partial模板
将原有导航栏遍历逻辑调整为合并输出两类菜单数据,支持二级页面展示,同时自动过滤当前站点的重复链接:
<a href="#" class="open_menu bg-light"> {/* 输出当前站点导航链接,保留原有业务逻辑 */} <f:for each="{mainnavigation}" as="navPoint"> <div><a href="{navPoint.link}" class="f-heading f-22 link color-white mb-20">{navPoint.title}</a></div> </f:for> {/* 输出其他站点导航链接 */} <f:for each="{allSitesNavigation}" as="siteNavPoint"> {/* 跳过当前站点根页,避免链接重复 */} <f:if condition="{siteNavPoint.uid} != {site.rootPageId}"> <div><a href="{siteNavPoint.link}" class="f-heading f-22 link color-white mb-20">{siteNavPoint.title}</a></div> {/* 遍历输出站点下二级页面 */} <f:for each="{siteNavPoint.children}" as="subNavPoint"> <div class="ms-3"> <a href="{subNavPoint.link}" class="f-16 link color-white mb-10">{subNavPoint.title}</a> </div> </f:for> </f:if> </f:for> </a>
- 代码中
{site.rootPageId}是TYPO3 11自带的全局站点变量,可直接在Fluid模板中调用,不需要额外通过数据处理器赋值 - 如果不需要展示二级页面,删掉对应子级
<f:for>循环即可 - 样式类名可以根据你的实际设计需求自行调整
内容的提问来源于stack exchange,提问作者Ehrenmann
相关产品推荐
相关产品推荐

