Berbagai Nilai untuk Memicu status #

18

Bagaimana saya bisa memiliki beberapa nilai memicu #state API Formulir?

Katakan misalnya, saya ingin bidang ini terlihat tidak hanya jika nilainya 5 (saat ini berfungsi di bawah), tetapi ingin menjadikan bidang tersebut terlihat jika nilainya 3, 4 atau 5.

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

Sebagai catatan, saya mencoba yang berikut dan tidak berhasil . Ini hanya berfungsi jika nilainya '4'

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

Ini juga tidak berfungsi , itu juga hanya berfungsi jika nilainya '4':

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

Jawaban:

39

Inilah yang Anda butuhkan:

'#states' => array(
    'visible' => array(
        ':input[name="field_star_rating"]' => array(
            array('value' => t('5')),
            array('value' => t('4'))
        ),
    ),
),
richardg
sumber
Ini memang cara yang benar, yang sekarang ditandai sebagai benar salah. Lihat masalah ini untuk info lebih lanjut: drupal.org/node/735528
Robin
API #states pasti masuk akal sejak 2011. Menandai sebagai benar.
Citricguy
ini adalah jawaban yang bagus, dan saya datang ke sini dari Google, seperti belasan kali ... hadiah sedang dalam perjalanan.
AyeshK
Ini berfungsi dengan baik untuk tampilan normal. Setelah menjalankan 'ajax', itu ditambahkan lagi dan lagi
Guru
3

Satu-satunya cara saya bisa mencari adalah menggunakan #ajax di D7.

Berikut adalah beberapa tips yang saya harap saya akan tahu sebelum memulai.

  1. #ajax dalam bentuk API luar biasa dan layak dipelajari
  2. #states tidak mendukung ATAU atau XOR (Tanpa patch? http://drupal.org/node/735528 )
  3. dpm ($ form); dan var_dump ($ form_state) pada fungsi pengiriman kustom sangat berharga

Ini adalah versi modifikasi dari salah satu contoh AJAX dari modul contoh.

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'];
}

Saya harap ini membantu seseorang yang mengalami masalah yang sama :)

Citricguy
sumber
Wow! Jawab teman saya sangat membantu. Saya telah membungkus kepala saya di sekitar masalah dengan # negara dan sekarang telah berfungsi tetapi #ajax akan lebih mudah sekarang karena Anda menampar saya dengan tongkat petunjuk. Dan tip debugging itu sebagai bonus? Maaf saya harus membayar Anda dengan karma yang sangat sedikit. ;)
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 Lihat modul contoh untuk fitur lainnya "form_example / form_example_states.inc"

milkovsky
sumber