फॉर्म एपीआई में संख्यात्मक क्षेत्र का प्रकार


12

मैं FAPI का उपयोग करके एक "नंबर" फ़ील्ड प्रकार को जोड़ने का प्रयास कर रहा हूं:

$form['phone_number']['areacode'] = array(
  '#type' => 'textfield',
  '#title' => '---',
  '#width' => '30%',
  '#align' => 'center',
  '#required' => true,
  '#maxlength' => 3
);

मैं TYPE को "संख्या" में बदल देता हूं और क्षेत्र बिल्कुल उत्पन्न नहीं होता है। संख्या मॉड्यूल सक्षम है। मैंने निम्नलिखित थीम कार्यों को लागू किया है:

  • MYTHEME_form_element
  • MYTHEME_textfield
  • MYTHEME_container

इस क्षेत्र के पीछे क्या हो सकता है जब मैं उपयोग करता हूं #type = numberया #type = number_integerइत्यादि नहीं दिखाता हूं ?

इसके साथ कुछ करना हो सकता है:

कस्टम रूपों के लिए कोड में मैन्युअल रूप से संख्या फ़ील्ड (पूर्णांक और दशमलव) बनाना

हालाँकि मैं वास्तव में HTML में "नंबर" के रूप में प्रस्तुत करना चाहता हूं इसलिए स्मार्ट फोन एक संख्यात्मक डायलर दिखाते हैं

कोई विचार?

जवाबों:


13
$form['my_element'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
        ' type' => 'number', // insert space before attribute name :)
    ),
    '#title' => 'My number',
    '#required' => true,
    '#maxlength' => 3
);

क्या स्पष्ट नहीं है? "फॉर्म एपीआई में न्यूमेरिक फील्ड टाइप" की आवश्यकता है? एक वांछित मान के साथ #attributes सरणी में " स्पेस " ( स्थान के साथ ) को परिभाषित करें : नंबर, दिनांक, रंग ... गंदा हैक
आर्थर

अधिकतम लंबाई काम नहीं कर रही है
logeshvaran

1
क्यों यह एक स्थान के लिए ned है?
fritzmg

यह अमान्य HTML btw की ओर जाता है।:<input type="number" type="text">
fritzmg

5

आप इसके लिए मॉड्यूल एलिमेंट्स इंस्टॉल और इस्तेमाल कर सकते हैं ।


HTML5 नंबर फ़ील्ड प्राप्त करने का यह सही तरीका है।
Decipher

1
#type="numberfield"इस मॉड्यूल का उपयोग करते समय फ़ील्ड को समायोजित करने का सही तरीका है।
YPCrumble

1
यह मॉड्यूल पहले से ही Drupal 8 में कोर में शामिल है । रेंडर एरे में नंबर फ़ील्ड का उपयोग करने का सही तरीका '#type' => 'number'(नॉट 'numberfield') है।
fritzmg

2

मुझे पार्टी करने में थोड़ी देर हो गई है। समस्या यह है कि theme_textfield (D7:, includes/form.incलाइनें 3924ff) हार्ड-कोड $element['#attributes']['type'] = 'text';

आप उक्त कॉल को लपेट सकते हैं if (!isset($element['#attributes']['type'])) { ... }या पैच के लिए प्रतीक्षा करें https://www.drupal.org/node/2545318 लागू होने के लिए।


1

यह आपका कोड नीचे है ..

$form['phone_number']['areacode'] = array(
'#type' => 'textfield',
'#title' => '---',
'#width' => '30%',
'#align' => 'center',
'#required' => true,
'#maxlength' => 3
);

कृपया मुझे बताओ [ 'PHONE_NUMBER'], यह एक कंटेनर है या नहीं या अपने रूप में इसके अस्तित्व है या नहीं क्या और फिर आप hook_form_alter का उपयोग करना चाहिए कि आपके फ़ॉर्म में कस्टम फ़ील्ड बनाना चाहते हैं hook_form_alter

पसंद

  function mymodule_form_alter($form_id, &$form) {
 if ($form_id == 'form_id') {

$form['field_name'] = array(
 '#type' => 'textfield',     
 '#title' => t('title'),
 '#description' => t('Description.'),
 '#width' => '30%',
 '#align' => 'center',
 '#required' => true,
 '#maxlength' => 3
 );
  }
   }

आशा है कि यह आपकी मदद करेगा ..


0

मैं इसे # फ़ील्ड के लिए अमान्य मान के साथ काम करते हुए नहीं देखता , हालाँकि आप ऐसा कुछ कर सकते हैं:

फार्म तत्व:

$form['my_element'] = array(
    '#type' => 'textfield',
    '#attributes' => array(
        'data-type' => 'number',
    ),
    '#title' => '---',
    '#width' => '30%',
    '#align' => 'center',
    '#required' => true,
    '#maxlength' => 3
);

और theme_textfield को लागू करना

if(isset($element['#attributes']['data-type']) && $element['#attributes']['data-type'] === 'number'){
    $output = '<input type="number" />';
}else{
    $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
}

मैं एक समाधान के लिए एक ही बात सोच रहा था - लेकिन आपका क्या मतलब है कि यह एक अवैध # ​​कार्य के साथ काम नहीं करेगा ???
एलेक्स। बैरलेस्की 16

यदि आपने #type के लिए कोई मान्य मान नहीं रखा है तो फॉर्म तत्व को बिल्कुल भी प्रस्तुत नहीं किया जाएगा, जैसा कि आपने पहले कहा था।
विक्टर लाजोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.