ExpressionEngine关联字段导航未生成链接问题排查求助
ExpressionEngine 7.5.18 导航菜单关联字段URL填充问题
我正在将导航菜单迁移至ExpressionEngine 7.5.18,关联字段无法正确填充URL。导航结构可正常渲染,但下拉菜单中的链接及子链接未加载对应数据。
问题
- 我访问关联字段数据的语法是否正确?
- 是否需要在
{exp:channel:entries}标签中启用特定参数以支持关联字段? - 在父循环中输出多个关联条目是否应采用其他实现方式?
频道设置
我创建了main_nav频道,包含以下字段:
- title(文本类型)
- url_title(自动生成)
- offsite_link(文本类型,用于外部URL)
- nav_url(关联字段,关联至页面条目)
- dropdown(开关类型,Y/N)
- direction(下拉菜单类型,用于CSS类)
- child_links(关联字段,关联至多个页面条目)
- menu_order(数字类型,用于排序)
当前代码
{exp:channel:entries channel="main_nav" orderby="menu_order" sort="asc" dynamic="no"} <div class="nav-item-wrapper"> <a class="nav-link-main" href="{if offsite_link}{offsite_link}{if:elseif nav_url}{nav_url}{nav_url:url_title}{/nav_url}{if:else}#{/if}" {if dropdown}id="nav{entry_id}"{/if}> {title} </a> {if dropdown} <div class="mega-dropdown {direction}"> <div class="mega-dropdown-content"> <div class="mega-dropdown-title"> <a href="{if offsite_link}{offsite_link}{if:elseif nav_url}{nav_url}/{nav_url:url_title}/{/nav_url}{if:else}#{/if}"> {title} </a> </div> <div class="mega-dropdown-links"> {child_links} <a href="/{child_links:url_title}"> {child_links:title} </a> {/child_links} </div> </div> </div> {/if} </div> {/exp:channel:entries}
当前输出
<div class="nav-menu d-none d-lg-flex"> <div class="nav-item-wrapper"> <a class="nav-link-main" href="#" id="nav16"> About Us </a> <div class="mega-dropdown "> <div class="mega-dropdown-content"> <div class="mega-dropdown-title"> <a href="#"> About Us </a> </div> <div class="mega-dropdown-links"> {child_links} <a href="/{child_links:url_title}"> {child_links:title} </a> {/child_links} </div> </div> </div> </div> </div>
解决方案
1. 关联字段访问语法修正
你当前访问单关联字段的语法有误,正确格式应为{字段名:关联字段的字段名},不需要嵌套标签:
- 单关联字段
nav_url获取URL标题的正确写法是{nav_url:url_title},而非{nav_url}{nav_url:url_title}{/nav_url} - 多关联字段
child_links的循环写法是正确的,问题出在未启用关联字段加载参数导致标签未被解析
2. 启用关联字段支持参数
必须在{exp:channel:entries}标签中添加related_entries="yes"参数,才能加载关联字段的数据。如果是多站点环境,可额外添加related_site="all"支持跨站点关联。修改后的标签:
{exp:channel:entries channel="main_nav" orderby="menu_order" sort="asc" dynamic="no" related_entries="yes"}
3. 多关联条目输出方式
你当前的child_links循环写法没问题,只要确保后台已正确关联条目,且添加了related_entries="yes"参数即可。如果需要更复杂的多关联处理,可考虑{exp:relationships}标签,但当前场景用现有写法足够。
修正后的完整代码
{exp:channel:entries channel="main_nav" orderby="menu_order" sort="asc" dynamic="no" related_entries="yes"} <div class="nav-item-wrapper"> <a class="nav-link-main" href="{if offsite_link}{offsite_link}{if:elseif nav_url}/{nav_url:url_title}{if:else}#{/if}" {if dropdown}id="nav{entry_id}"{/if}> {title} </a> {if dropdown} <div class="mega-dropdown {direction}"> <div class="mega-dropdown-content"> <div class="mega-dropdown-title"> <a href="{if offsite_link}{offsite_link}{if:elseif nav_url}/{nav_url:url_title}{if:else}#{/if}"> {title} </a> </div> <div class="mega-dropdown-links"> {child_links} <a href="/{child_links:url_title}"> {child_links:title} </a> {/child_links} </div> </div> </div> {/if} </div> {/exp:channel:entries}
额外检查点
- 确认
nav_url和child_links字段在后台已正确关联到对应页面条目 - 检查关联的页面条目是否已发布(未发布条目不会被加载)
- 若使用URL路由规则,确保
url_title对应的路径配置正确
内容的提问来源于stack exchange,提问作者ADMAndrew
相关产品推荐
相关产品推荐

