Điều khiển nhúng 8 phần tử #table?


7

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

1
Tôi hiểu những gì bạn đang nói bây giờ. Phần #rowstử đượ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 #tablemả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 #markupmục nhập.
James Shields

Câu trả lời:


12

Không có vấn đề gì khi đặt các phần tử biểu mẫu trong một bảng. Xem ví dụ trong core / lib / Drupal / Core / Render / Element / Table.php:

$form['contacts'] = array(
    '#type' => 'table',
    '#title' => 'Sample Table',
    '#header' => array('Name', 'Phone'),
  );

  for ($i=1; $i<=4; $i++) {
    $form['contacts'][$i]['name'] = array(
      '#type' => 'textfield',
      '#title' => t('Name'),
      '#title_display' => 'invisible',
    );

    $form['contacts'][$i]['phone'] = array(
      '#type' => 'tel',
      '#title' => t('Phone'),
      '#title_display' => 'invisible',
    );
  }

Có lẽ bạn nên bắt đầu từ đây và sau đó đặt từng bước mã của bạn vào ví dụ này và xem khi nào nó bị hỏng.


Đó chỉ là những gì tôi cần.
James Shields
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.