如何在单个控制器drupal 8中渲染两个主题表

问题描述 投票:0回答:1

我想在 Drupal 8 中的同一路由上渲染两个表。我尝试合并它们,但它总是显示最后一个表。我正在尝试通过 array_merge 合并两个表。

控制器文件:

class AdminController extends ControllerBase {
  public function List() {
    $DefaultList = $this->DeafultList();
    $CustomList = $this->CustomList();
    $list = array_merge($DefaultList , $CustomList);
    return $list;
  }

  public function DeafultList() {
  $header = array(
  'id' => t('<a>ID</a>'),
  'title' => t('<a> Default Title</a>'),
  'lang' => t('<a> Language</a>'),
  'updated' => t('<a> Last Updated</a>'),
);
$rows = array();
foreach ($this->defaultStorage->list() as $id => $obj) {
  $last_updated_date = \Drupal::service('date.formatter')->format($obj->updated, 'custom', 'm/d/Y');
  $custom_details = Json::decode($obj->data);
  $rows[] = array(
    'data' => array(
      $obj->id,
      $obj->title,
      strtoupper($obj->language),
      $last_updated_date,
    ),
  );
}
return [
  '#type' => 'table',
  '#header' => $header,
  '#rows' => $rows,
  '#attributes' => array(
    'id' => 'search_default',
    'class' => array('cmttblcls'),
  ),
  '#attached' => array(
    'library' => array(
      'my_module/my_module.ui',
      'my_module/my_module.ui.admin'
    ),
  ];
 }

public function CustomList() {
// Table header
$header = array(
  'id' => t('<a>ID</a>'),
  'title' => t('<a> Custom Title</a>'),
  'language' => t('<a> Language</a>'),
  'updated' => t('<a> Last Updated</a>'),
);
$rows = array();
foreach ($this->customStorage->list() as $id => $obj) {
  $last_updated_date = \Drupal::service('date.formatter')->format($obj->updated, 'custom', 'm/d/Y');
  $custom_details = Json::decode($obj->data);
  $rows[] = array(
    'data' => array(
      $obj->id,
      $obj->title,
      strtoupper($obj->language),
      $last_updated_date,
    ),
  );
}
return [
  '#type' => 'table',
  '#header' => $header,
  '#rows' => $rows,
  '#attributes' => array(
    'id' => 'search',
    'class' => array('cmttblcls'),
  ),
  '#attached' => array(
    'library' => array(
      'my_module/my_module.ui',
      'my_module/my_module.ui.admin'
     ),
   ),
  ];
 }
}

如何在同一页面上呈现两个表格?我应该使用

\Drupal::service('renderer')->render($elements)
吗?我是的,那么请举一些简短的例子。

我是 Drupal 新手。

php html-table themes drupal-8
1个回答
1
投票

你不能那样做。试试这个:

class AdminController extends ControllerBase {
  public function List() {
    $DefaultList = $this->DeafultList();
    $DefaultList = render($DefaultList);
    $CustomList = $this->CustomList();
    $CustomList = render($CustomList);
    return ['#markup' => $DefaultList . $CustomList];
  }
© www.soinside.com 2019 - 2024. All rights reserved.