Nhiều giá trị để kích hoạt #states


18

Làm cách nào tôi có thể có nhiều giá trị kích hoạt #states của API Mẫu?

Ví dụ, tôi muốn trường này hiển thị không chỉ nếu giá trị là 5 (hiện đang hoạt động bên dưới), mà còn muốn làm cho trường hiển thị nếu các giá trị là 3, 4 hoặc 5.

'#states' => array(
    'visible' => array(
       ':input[name="field_star_rating"]' => array('value' => t('5')),
    ),
),

Như một lưu ý, tôi đã thử cách sau và nó không hoạt động . Nó chỉ hoạt động nếu giá trị là '4'

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array('value' => t('5')),
        ':input[name="field_star_rating"]' => array('value' => t('4')),
    ),
),

Điều này cũng không hoạt động , nó cũng chỉ hoạt động nếu giá trị là '4':

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array('value' => t('5'), 'value' => t('4')),
    ),
),

Câu trả lời:


39

Đây là những gì bạn cần:

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array(
            array('value' => t('5')),
            array('value' => t('4'))
        ),
    ),
),

Đây thực sự là cách chính xác, hiện tại được đánh dấu là chính xác là sai. Xem vấn đề này để biết thêm: drupal.org/node/735528
Robin

API #states chắc chắn đã đi một chặng đường dài năm 2011. Đánh dấu là chính xác.
Citricguy

đây là một câu trả lời tuyệt vời và tôi đã đến đây từ Google, giống như hàng tá lần ... một tiền thưởng đang trên đường đến.
AyeshK

Nó hoạt động tốt cho xem bình thường. Sau khi chạy bất kỳ 'ajax' nào, nó được thêm lần nữa

3

Cách duy nhất tôi có thể hình là sử dụng #ajax trong D7.

Dưới đây là một vài lời khuyên hữu ích mà tôi ước mình đã biết trước khi bắt đầu.

  1. #ajax trong API mẫu rất tuyệt vời và đáng để học hỏi
  2. #states không hỗ trợ HOẶC hoặc XOR (Không có bản vá? http://drupal.org/node/735528 )
  3. dpm (mẫu $); và var_dump ($ form_state) trên một hàm gửi tùy chỉnh là vô giá

Đây là phiên bản sửa đổi của một trong các ví dụ AJAX từ mô-đun ví dụ.

function plugin_autotextfields($form, &$form_state) {

    $form['star_rating'] = array(
        '#type' => 'select',
        '#title' => t('Star Rating'),
        '#options' => array('_none' => '- select -', 5 => '5 Star', 4 => '4 Star', 3 => '3 Star', 2 => '2 Star', 1 => '1 Star'),
        '#ajax' => array(
            'callback' => 'plugin_autotextfields_callback',
            'wrapper' => 'textfields',
            'effect' => 'fade',
        ),
    );

    $form['textfields'] = array(
        '#title' => t("Fieldset Name"),
        '#prefix' => '<div id="textfields">',
        '#suffix' => '</div>',
        '#type' => 'fieldset',
        '#description' => t('Where the field will be placed'),
    );

    if (!empty($form_state['values']['star_rating']) && $form_state['values']['star_rating'] == 5) {
        $form['textfields']['review'] = array(
            '#type' => 'textfield',
            '#title' => t('Message if 5 stars'),
        );
    } else if (!empty($form_state['values']['star_rating'])) {
        $form['textfields']['review'] = array(
            '#type' => 'textfield',
            '#title' => t('Message if not 5 stars'),
        );
    }

    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Click Me'),
    );

    return $form;
}

function omfg_autotextfields_callback($form, $form_state) {
    return $form['textfields'];
}

Tôi hy vọng điều này sẽ giúp ai đó gặp vấn đề tương tự :)


Ồ Rất hữu ích trả lời bạn của tôi. Tôi đã quấn đầu xung quanh một vấn đề với #states và bây giờ nó đã hoạt động nhưng #ajax rõ ràng sẽ dễ dàng hơn khi bạn tát tôi bằng một cây gậy. Và mẹo gỡ lỗi đó như một phần thưởng? Xin lỗi tôi phải trả cho bạn với nghiệp bệnh sởi. ;)
stefgosselin

3
 $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),
      ),
    ),
  );

PS Xem mô-đun ví dụ để biết thêm các tính năng "form_example / form_example_states.inc"

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.