it-swarm-vi.com

Tự động ẩn / hiển thị các trường API trường trong Drupal 7

Tôi đã tạo một thực thể với hình thức 'thêm mới'. Bản thân thực thể có một số lượng hạn chế của các biến thực tế. Tôi đã thêm hầu hết các dữ liệu bổ sung mà tôi cần bằng cách sử dụng Trường tùy chỉnh (ví dụ: API trường).

Những gì tôi cần làm trong giai đoạn này là có thể ẩn động một trường dựa trên giá trị của trường khác. tức là nếu một trường thả xuống có giá trị được đặt thành Không, thì một trường khác sẽ bị ẩn, nếu không thì nó sẽ được hiển thị.

Từ những gì tôi có thể thấy, có thể dễ dàng thêm chức năng này vào các trường được tạo bằng API Mẫu (tức là thông qua thuộc tính AJAX), tuy nhiên có cách nào để đạt được nó bằng cách sử dụng các trường đính kèm không? Tôi không gặp vấn đề gì khi sử dụng Javascript tùy chỉnh nếu đó là điều bắt buộc để giải quyết vấn đề này.

14
NRaf

jQuery hoạt động tốt cho việc này:

(function($) {
  $(document).ready(function() {
    $('#select1').change(function() {
      switch ($(this).val()) {
        case '1':
          $('#field2').hide();
          break;
        default:
          $('#field2').show();
          break;
      }
    });
  });
}) (jQuery);
5
keithm

Trong Drupal 7 bạn có thể sử dụng $ form #states thay vì tập lệnh jQuery tùy chỉnh. Thí dụ:

  $form['student_type'] = array(
    '#type' => 'radios',
    '#options' => array(
      'high_school'   => t('High School'),
      'undergraduate' => t('Undergraduate'),
      'graduate'      => t('Graduate'),
    ),
    '#title' => t('What type of student are you?')
  );

  // High school information.
  $form['high_school']['tests_taken'] = array(
    '#type' => 'checkboxes',
    '#options' => drupal_map_assoc(array(t('SAT'), t('ACT'))),
    '#title' => t('What standardized tests did you take?'),
    // This #states rule says that this checkboxes array will be visible only
    // when $form['student_type'] is set to t('High School').
    // It uses the jQuery selector :input[name=student_type] to choose the
    // element which triggers the behavior, and then defines the "High School"
    // value as the one that triggers visibility.
    '#states' => array(
      'visible' => array(   // action to take.
        ':input[name="student_type"]' => array('value' => 'high_school'),
      ),
    ),
  );

Dưới đây là ví dụ nếu bạn muốn sử dụng #states cho điều kiện nhiều giá trị:

 $form['student_type'] = array(
    '#type' => 'checkboxes',
    '#options' => array(
      'high_school'   => t('High School'),
      'undergraduate' => t('Undergraduate'),
      'graduate'      => t('Graduate'),
    ),
    '#title' => t('What type of student are you?')
  );

  // High school information.
  $form['high_school']['tests_taken'] = array(
    '#type' => 'textfield',
    '#title' => t('What standardized tests did you take?'),
    '#states' => array(
      'visible' => array(   // action to take.
        ':input[name="student_type[high_school]"]' => array('checked' => TRUE),
        ':input[name="student_type[undergraduate]"]' => array('checked' => TRUE),
        ':input[name="student_type[graduate]"]' => array('checked' => FALSE),
      ),
    ),
  );

Xem form_example/form_example_states.inc from ví dụ mô-đun để biết thêm chi tiết và ví dụ.

19
milkovsky

Bạn nên thử Trường có điều kiện , tôi nghĩ mô-đun này là phải có cho nhiệm vụ này. Bạn có thể đặt phụ thuộc giữa các trường trên giao diện quản trị thân thiện với người dùng. Ví dụ: bạn có thể đặt trường A thành chỉ hiển thị nếu B trường có giá trị " 1234 "hoặc bạn chỉ có thể đặt C trường văn bản thành chỉ hiển thị khi trường D được chọn hoặc đặt trường E thành vô hình nếu F tập trung , v.v.

Trên biểu mẫu tải lên, các phụ thuộc này sẽ được đặt phía máy khách, trên màn hình nút, các phụ thuộc này sẽ được đặt ở phía máy chủ.

Bạn có thể đặt các phụ thuộc này tại admin/structure/types/manage/[YOURCONTENTTYPESMACHINENAME]/dependencies.

Conditional Fields(Nguồn hình ảnh: dự án trang )

4
Sk8erPeter