ट्रिगर #states के लिए एकाधिक मान


18

मैं फॉर्म एपीआई के #states को कई मान कैसे दे सकता हूं?

उदाहरण के लिए कहें, मैं चाहता था कि यह क्षेत्र न केवल तभी दिखाई दे, जब मूल्य 5 (वर्तमान में नीचे काम करता है), बल्कि मान 3, 4 या 5 होने पर क्षेत्र को दृश्यमान बनाना चाहता था।

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

एक नोट के रूप में, मैंने निम्नलिखित की कोशिश की और यह काम नहीं करता है । यह केवल तभी काम करता है जब मान '4' हो

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

यह भी काम नहीं करता है , यह केवल तभी काम करता है जब मान '4' हो:

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

जवाबों:


39

यहाँ आपको क्या चाहिए:

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

यह वास्तव में सही तरीका है, सही के रूप में चिह्नित वर्तमान गलत है। अधिक जानकारी के लिए इस मुद्दे को देखें: drupal.org/node/735528
— रॉबिन

#States API यकीन है कि 2011 में एक लंबा रास्ता तय कर चुका है। सही रूप में चिह्नित करना।
— 1

यह एक महान जवाब है, और मैं Google से एक दर्जन बार की तरह यहां आया था ... एक इनाम अपने रास्ते पर है।
— आयुष

यह सामान्य दृश्य के लिए ठीक काम कर रहा है। किसी भी 'अजाक्स' को चलाने के बाद, यह बार-बार जोड़ा जाता है
— गुरु

3

केवल तरीका मैं समझ सकता हूं कि डी 7 में #ajax का उपयोग करना है।

यहाँ कुछ सहायक टिप हैं I काश मैं शुरू करने से पहले जान लेता।

  1. एपीआई में #ajax कमाल का है और सीखने लायक है
  2. #states OR या XOR का समर्थन नहीं करता (पैच के बिना? http://drupal.org/node/735528 )
  3. DPM ($ फार्म); और एक कस्टम सबमिट फ़ंक्शन पर var_dump ($ form_state) अनमोल हैं

यहाँ उदाहरण मॉड्यूल से AJAX उदाहरणों में से एक का संशोधित संस्करण है।

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

मुझे आशा है कि यह किसी को उसी समस्या में चलाने में मदद करता है :)


वाह! बहुत मददगार जवाब मेरे दोस्त। मैं #states के साथ एक मुद्दे के आसपास अपना सिर लपेटता रहा हूं और अब यह काम कर रहा है, लेकिन # आज स्पष्ट रूप से आसान हो जाएगा कि आपने मुझे एक थप्पड़-छड़ी के साथ थप्पड़ मारा। और उस डिबगिंग टिप को बोनस के रूप में? क्षमा करें, मुझे आपको कर्म फल के साथ भुगतान करना होगा। ;)
— स्टेफोसोसेलिन

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 अधिक सुविधाओं के लिए उदाहरण मॉड्यूल देखें "form_example / form_example_states.inc"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.