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

Drupal 8同一路由下渲染两个表格问题:合并后仅显示最后一个

解决Drupal 8同一路由下渲染两个表格仅显示最后一个的问题

我之前做Drupal开发时也踩过这个坑!你用array_merge合并两个表格渲染数组后只显示最后一个表格,核心原因是Drupal生成的表格渲染数组,其顶级键(比如#type、#header、#rows)都是相同的,而array_merge会直接覆盖键名重复的元素,前面的表格配置就被后面的完全覆盖了,所以最终只渲染第二个表格。

正确的做法:给每个表格分配独立的键名

你不需要用array_merge,而是把两个表格作为独立的子元素放到返回的渲染数组里,给它们设置不同的键名,这样Drupal的渲染系统会依次处理每个子元素,不会出现覆盖问题。修改你的控制器代码如下:

class AdminController extends ControllerBase {
  public function List() {
    // 注意:原代码里的DeafultList拼写错误,应该是DefaultList
    $DefaultList = $this->DefaultList();
    $CustomList = $this->CustomList();
    
    // 返回包含两个表格的数组,每个表格用唯一键名标识
    return [
      // 第一个表格:默认列表
      'default_table' => $DefaultList,
      // 可以添加分隔元素,让两个表格更清晰
      'table_separator' => [
        '#markup' => '<div style="margin: 20px 0;"><hr></div>',
      ],
      // 第二个表格:自定义列表
      'custom_table' => $CustomList,
    ];
  }

  public function DefaultList() {
    $header = [
      'id' => t('ID'),
      // 补充你的其他表头字段
    ];
    $rows = [];
    // 省略你的表格行构建逻辑
    
    return [
      '#type' => 'table',
      '#title' => t('默认数据列表'), // 给表格添加标题,增强可读性
      '#header' => $header,
      '#rows' => $rows,
    ];
  }

  // CustomList方法为自定义表格构建逻辑
  public function CustomList() {
    $header = [
      // 自定义表头
    ];
    $rows = [];
    // 省略行构建逻辑
    
    return [
      '#type' => 'table',
      '#title' => t('自定义数据列表'),
      '#header' => $header,
      '#rows' => $rows,
    ];
  }
}

额外说明

  • 键名唯一性:只要给两个表格分配不同的键名(比如default_table和custom_table),Drupal就会分别渲染它们,不会互相覆盖。
  • 容器包裹(可选):如果需要给两个表格添加统一的样式或结构,可以用#type => container把它们包起来,比如:
    return [
      '#type' => 'container',
      '#attributes' => ['class' => ['table-container']],
      'default_table' => $DefaultList,
      'custom_table' => $CustomList,
    ];
    
  • 拼写修正:原代码里的DeafultList是拼写错误,应该改为DefaultList,虽然这不是导致表格不显示的直接原因,但可能引发其他错误,建议修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:44