Tôi đang sử dụng phần tử Drupal 8 #table để điền vào bảng trên biểu mẫu của mình và nó hoạt động rất tốt để hiển thị dữ liệu tĩnh.
foreach ($entries = getData() as $entry) {
$row = array_map('Drupal\Component\Utility\SafeMarkup::checkPlain', $entry);
$rows[] = $row;
}
$form['table'] = array(
'#type' => 'table',
'#header' => $headers,
'#rows' => $rows,
'#attributes' => array('id' => 'my-module-list'),
'#empty' => t('No entries available.'),
);
Tuy nhiên, tôi muốn nhúng một điều khiển vào mỗi hàng của bảng, ví dụ:
foreach ($entries = getData() as $entry) {
$row = array_map('Drupal\Component\Utility\SafeMarkup::checkPlain', $entry);
$row["field_name"] = array(
'#type' => 'textbox',
);
$rows[] = $row;
}
//dpm($rows);
$form['table'] = array(
'#type' => 'table',
'#header' => $headers,
'#rows' => $rows,
'#attributes' => array('id' => 'my-module-list'),
'#empty' => t('No entries available.'),
);
Tuy nhiên, trường #textbox hiện đang bị bỏ qua và một ô trống được hiển thị ở vị trí của nó.
Có cách nào để tôi có thể nhúng các trường vào bảng được tạo bởi Drupal hay tôi cần xây dựng bảng của riêng mình từ đầu?
a) không sử dụng #row trong mẫu. Mỗi phần tử con của phần tử #table là một hàng và mỗi phần tử con của hàng đó là một ô bảng. b) #textbox không tồn tại trong lõi Drupal. Có lẽ bạn có nghĩa là #textfield?
Cảm ơn các ý kiến. a) Hàm getData đọc bảng cơ sở dữ liệu và trả về một mảng các đối tượng. Mảng_map chuyển đổi đối tượng thành một mảng dữ liệu được đánh dấu an toàn, vì vậy $ rows là một mảng các mảng. b) Sai lầm của tôi. Tôi đã thử một số loại phần tử, nhưng chúng chỉ trở thành thuộc tính của thẻ td. Ví dụ: "<td # type =" textfield "> </ td>". Sự nghi ngờ của tôi là việc nhúng các điều khiển biểu mẫu trong bảng không được hỗ trợ.
—
James Shields
Tôi hiểu những gì bạn đang nói bây giờ. Phần
—
James Shields
#rows
tử được chuyển đổi thành một bảng các ô văn bản đơn giản khi bảng được hiển thị. Để đặt các điều khiển trong bảng, đặt các hàng làm thành phần trực tiếp của #table
mảng. Mọi thứ trong bảng sau đó được coi là một điều khiển, vì vậy các ô văn bản đơn giản phải có một #markup
mục nhập.