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

Smarty模板中{foreachelse}后新增href链接无法显示的问题求助

问题原因与解决方案

原因说明

Smarty 的 {foreach}+{foreachelse} 是互斥执行逻辑:

  • 当 $departments 有数据时,只会运行 {foreach} 到 {foreachelse} 之间的循环代码,{foreachelse} 到 {/foreach} 之间的所有内容(包括你添加的链接)都会被跳过。
  • 只有当 $departments 为空时,才会执行 {foreachelse} 块内的内容和你加的链接。

而把链接放在 {foreach} 起始标签前,属于循环结构之外的代码,不管 $departments 是否有数据都会执行,所以能正常显示。

解决方案

根据你的需求选择对应方式:

1. 无论有无部门都显示链接

把链接放在 {/foreach} 标签外部(循环前或循环后均可):

{foreach from=$departments key=num item=department}
  <a class="list-group-item" href="{$smarty.server.PHP_SELF}?step=2&amp;deptid={$department.id}">
    <i class="fas fa-envelope"></i>
    <strong>{$department.name}</strong>
    {if $department.description}
      <p>{$department.description}</p>
    {/if}
  </a>
{foreachelse}
  <span class="list-group-item">{include file="$template/includes/alert.tpl" type="info" msg=$LANG.nosupportdepartments textcenter=true}</span>
{/foreach}
<!-- 新链接放在循环外部 -->
<a href="你的目标地址">自定义链接</a>

2. 仅当有部门时显示链接

在 {/foreach} 后添加条件判断,检查 $departments 是否存在数据:

{foreach from=$departments key=num item=department}
  <a class="list-group-item" href="{$smarty.server.PHP_SELF}?step=2&amp;deptid={$department.id}">
    <i class="fas fa-envelope"></i>
    <strong>{$department.name}</strong>
    {if $department.description}
      <p>{$department.description}</p>
    {/if}
  </a>
{foreachelse}
  <span class="list-group-item">{include file="$template/includes/alert.tpl" type="info" msg=$LANG.nosupportdepartments textcenter=true}</span>
{/foreach}
{if $departments}
  <a href="你的目标地址">自定义链接</a>
{/if}

3. 每个部门条目后都显示链接

把链接放到 {foreach} 循环体内部,每循环一个部门就会渲染一次链接:

{foreach from=$departments key=num item=department}
  <a class="list-group-item" href="{$smarty.server.PHP_SELF}?step=2&amp;deptid={$department.id}">
    <i class="fas fa-envelope"></i>
    <strong>{$department.name}</strong>
    {if $department.description}
      <p>{$department.description}</p>
    {/if}
  </a>
  <!-- 新链接放在循环体内 -->
  <a href="你的目标地址">自定义链接</a>
{foreachelse}
  <span class="list-group-item">{include file="$template/includes/alert.tpl" type="info" msg=$LANG.nosupportdepartments textcenter=true}</span>
{/foreach}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:15:36