Làm thế nào để triển khai thêm Thêm một mục khác cho các biểu mẫu tùy chỉnh?


9

Tôi đang viết một mô-đun về cơ bản là một hình thức tạo ra mối quan hệ giữa hai điểm cuối.

Tôi muốn một người dùng có thể tạo nhiều mối quan hệ cùng một lúc. Tôi muốn thêm một nút có nội dung "thêm một mục khác" giống như cách các trường có khi bạn chọn không giới hạn trong cài đặt của chúng.

Có cách nào tôi có thể làm điều này với các hình thức tùy chỉnh không?

Câu trả lời:


12

Một cách để làm điều này là bằng cách đặt các trường mẫu / bộ trường trong hàm for. Tạo một hàm riêng biệt để tăng giá trị thông qua một cuộc gọi lại nút gửi ví dụ và xây dựng lại biểu mẫu sau khi bạn tăng.

for($x=1; $x<=$variabletoincrement; $x++){
(insert form fields/field sets )
}

Đây là mã từ form_example_tutorial_9 để hiển thị thông tin về cách tạo các trường động. Thông tin này kỹ lưỡng hơn nhiều so với lời giải thích của tôi:

http://api.drupal.org/api/examples/form_example!form_example_tutorial.inc/feft/form_example_tutorial_9_add_name/7

http://api.drupal.org/api/examples/form_example%21form_example_tutorial.inc/feft/form_example_tutorial_9/7


8

Để có một ví dụ mã đơn giản và làm việc:

function MYMODULE_MYFORM($form, &$form_state) {

  // #tree will ensure the HTML elements get named distinctively.
  // Not just name=[name] but name=[container][123][name].
  $form['#tree'] = TRUE;

  if (empty($form_state['number_names'])) {
    $form_state['number_names'] = 1;
  }

  for ($i = 1; $i <= $form_state['number_names']; $i++) {

    $form['container'][$i] = array(
      '#type' => 'container',
    );
    $form['container'][$i]['name'] = array(
      '#type' => 'textfield',
      '#attributes' =>array('placeholder' => t('Name')),
      '#size' => 20,
      '#required' => TRUE,
    );
  }

  $form['add_item'] = array(
    '#type' => 'submit',
    '#value' => t('Add another name'),
    '#submit' => array('MYMODULE_MYFORM_add_item'),
  );

  if ($form_state['number_names'] > 1) {

    $form['remove_item'] = array(
      '#type' => 'submit',
      '#value' => t('Remove latest name'),
      '#submit' => array('MYMODULE_MYFORM_remove_item'),
      // Since we are removing a name, don't validate until later.
      '#limit_validation_errors' => array(),
    );
  }

  // $form['submit'] = array(
  //   '#type' => 'submit',
  //   '#value' => 'Submit',
  // );

  return $form;
}

function MYMODULE_MYFORM_add_item($form, &$form_state) {

  // All we need is to increase the number used in our for loop above ...
  $form_state['number_names']++;
  // ... and rebuild our form.
  $form_state['rebuild'] = TRUE;
}

function MYMODULE_MYFORM_remove_item($form, &$form_state) {

  // Just the other way around until only one item is left ...
  if ($form_state['number_names'] > 1) {
    $form_state['number_names']--;
  }
  // ... and form rebuild again.
  $form_state['rebuild'] = TRUE;
}

Drupal 8

Kiểm tra mô-đun mẫu AjaxAddMore.php(nhấp vào liên kết "Xem nguồn" nhỏ).

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.