我想在 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 新手。
你不能那样做。试试这个:
class AdminController extends ControllerBase {
public function List() {
$DefaultList = $this->DeafultList();
$DefaultList = render($DefaultList);
$CustomList = $this->CustomList();
$CustomList = render($CustomList);
return ['#markup' => $DefaultList . $CustomList];
}