जवाबों:
यह एक 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
फ़ंक्शंस में जोड़े जाएंगे, जैसे (उदाहरण के लिए किसी छवि फ़ील्ड के ऑल्ट और टाइटल टेक्स्टफ़ील्ड्स)।
मैंने क्लाइव के उत्तर की कोशिश की:
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');
}
}
फॉर्म फील्ड तत्व के लिए बस प्लेसहोल्डर सरणी में प्लेसहोल्डर को जोड़ें, जैसे कि निम्न कोड में।
$form['my_textfield'] = array(
'#type' => 'textfield',
'#attributes' => array(
'placeholder' => t('My placeholder text'),
),
);
इस पर लड़खड़ाया और लगा कि क्लाइव का जवाब प्लेसहोल्डर्स को अपने आप जोड़ने के लिए अच्छा लग रहा है।
तू, ड्रुपल 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]);
}
}
यदि आप प्रपत्र उदाहरण को लक्षित करना चाहते हैं तो सीधे हुक_फॉर्म_फॉर्म_आईडी_अल्टर का उपयोग करें। सशर्त का उपयोग करने से अधिक कठिन हो सकता है। केवल खोज प्रपत्र ब्लॉक उदाहरण को लक्षित करने के लिए मेरा समाधान।
function eyecare_form_search_block_form_alter(&$form, $form_state) {
$form['keys']['#attributes']['placeholder'] = t('Search');
}