टेक्स्ट इनपुट फ़ील्ड में फ़ॉर्म प्लेसहोल्डर जोड़ना


22

क्या एक नियमित रूप से रूपांतरित करने और प्लेसहोल्डर्स को एक मॉड्यूल के साथ जोड़ने का एक तरीका है, या यह एक फॉर्म टेम्पलेट के साथ या jQuery के साथ किया जाना चाहिए?

जवाबों:


31

यह एक HTML5 प्लेसहोल्डर है, आप इसे किसी भी तत्व के लिए एक विशेषता के रूप में जोड़ सकते हैं और HTML5 सक्षम ब्राउज़र तदनुसार प्रतिक्रिया करेंगे:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'some_form') {
    $form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
  }
}

इस तरह का एक संक्षिप्त पुनरावर्ती कार्य आसान हो सकता है यदि आप स्वचालित रूप से प्रत्येक टेक्स्टफील्ड के लिए प्लेसहोल्डर्स को एक फॉर्म में जोड़ना चाहते हैं (इस उदाहरण में फ़ील्ड के शीर्षक के आधार पर):

function MYMODULE_auto_placeholders(&$element) {
  if ( isset($element['#type']) && $element['#type'] == 'textfield') {
    // set placeholder
    $element['#attributes']['placeholder'] = $element['#title'];
    // hide label
    $element['#title_display'] = 'invisible';
  }
  foreach (element_children($element) as $key) {
    MYMODULE_auto_placeholders($element[$key]);
  }
}

फिर अपने फ़ॉर्म में परिवर्तन फ़ंक्शन को कॉल करें

MYMODULE_auto_placeholders($form);

यह विधि एक फॉर्म पर प्रत्येक टेक्स्टफ़ील्ड के लिए बहुत अधिक काम करेगी, जो उन #processफ़ंक्शंस में जोड़े जाएंगे, जैसे (उदाहरण के लिए किसी छवि फ़ील्ड के ऑल्ट और टाइटल टेक्स्टफ़ील्ड्स)।


परिणाम: त्रुटि: bla_auto_placeholders () (थीम / कस्टम / बीएलए / bla.theme की लाइन 605) में अपरिभाषित फ़ंक्शन तत्व_children () को कॉल करें।
थॉमस

15

मैंने क्लाइव के उत्तर की कोशिश की:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'some_form') {
    $form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
  }
}

लेकिन मेरे आश्चर्य के लिए, मुझे टेक्स्टफील्ड के रैपर में प्लेसहोल्डर मिला, न कि टेक्स्टफील्ड ही। फिर मैंने इस प्रकार एक बदलाव की कोशिश की, यह काम किया!

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'some_form') {
    $form['some_element']['und'][0]['value']['#attributes']['placeholder'] = t('Placeholder text');
  }
}

धन्यवाद! मैं थोड़ा पागल होने लगा था - इस बारे में सोचा भी नहीं था।
माइक क्रिटेंडन

"Some_element" क्या है? तत्व की आईडी है? मैं इसे कैसे खोज सकता हूं?
सोक्रैटिस

@sokratis आप dpm ($ फॉर्म) द्वारा तत्वों की आईडी प्राप्त कर सकते हैं, वे $ फॉर्म सरणी के पहले स्तर में दिखाई देते हैं। निम्नलिखित टिप्पणी फ़ॉर्म को बदलने का एक वास्तविक उदाहरण है: <code> फ़ंक्शन MYMODULE_form_alter (($ फ़ॉर्म, और $ form_state, $ form_id) {if ($ form_id == 'टिप्पणी_n_post_form') {$ फ़ॉर्म ['विषय'] [# #] विशेषताएँ '] [' प्लेसहोल्डर '] = टी (' विषय '); $ फ़ॉर्म ['टिप्पणी_बोलो]] [[अंड ’] [०] [] मूल्य’] [attributes # विशेषताएँ ’] [= स्थानधारक’] = टी (' सामग्री ’); }} </ कोड>
हेनरी

15

फॉर्म फील्ड तत्व के लिए बस प्लेसहोल्डर सरणी में प्लेसहोल्डर को जोड़ें, जैसे कि निम्न कोड में।

   $form['my_textfield'] = array(
      '#type' => 'textfield',
      '#attributes' => array(
        'placeholder' => t('My placeholder text'),
      ),
    );

2
thx, इसने मेरे लिए Drupal 8. में काम किया
No Sssweat

D8 में अच्छी तरह से काम किया।
ड्रेश

5

इस पर लड़खड़ाया और लगा कि क्लाइव का जवाब प्लेसहोल्डर्स को अपने आप जोड़ने के लिए अच्छा लग रहा है।

तू, ड्रुपल 8 में इसे ठीक करने के लिए कुछ मामूली बदलावों की आवश्यकता है, इसलिए यहां बहुत ही समान उत्तर है, लेकिन आपके ड्रुपल 8 थीम के लिए उपयुक्त है।

/**
 * Implements hook_form_alter
 */
function THEME_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  add_placeholders($form);
}


/**
 * Add placeholders to suitable form elements -> textfield, password, email, textarea
 */
function add_placeholders(&$element) {
  if(isset($element['#type']) && in_array($element['#type'], ['textfield', 'password', 'email', 'textarea'])) {
    $element['#attributes']['placeholder'] = $element['#title'];
  }
  foreach(\Drupal\Core\Render\Element::children($element) as $key) {
    add_placeholders($element[$key]);
  }
}

0

यदि आप प्रपत्र उदाहरण को लक्षित करना चाहते हैं तो सीधे हुक_फॉर्म_फॉर्म_आईडी_अल्टर का उपयोग करें। सशर्त का उपयोग करने से अधिक कठिन हो सकता है। केवल खोज प्रपत्र ब्लॉक उदाहरण को लक्षित करने के लिए मेरा समाधान।

function eyecare_form_search_block_form_alter(&$form, $form_state) {
  $form['keys']['#attributes']['placeholder'] = t('Search');
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.