উত্তর:
এটি একটি এইচটিএমএল 5 স্থানধারক, আপনি কেবল এটির কোনও উপাদান হিসাবে একটি বৈশিষ্ট্য হিসাবে যুক্ত করতে পারেন এবং এইচটিএমএল 5 সক্ষম ব্রাউজারগুলি সেই অনুযায়ী প্রতিক্রিয়া জানাবে:
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
ফাংশনগুলিতে যুক্ত হওয়া ব্যতীত (উদাহরণস্বরূপ কোনও চিত্র ক্ষেত্রের Alt এবং শিরোনাম পাঠ্যক্ষেত্রের মতো)।
ক্লাইভের উত্তরটি চেষ্টা করেছিলাম:
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]);
}
}
আপনি যদি কোনও ফর্ম উদাহরণ লক্ষ্য করতে চান তবে সরাসরি hook_for_FORM_ID_alter ব্যবহার করুন। শর্তসাপেক্ষ ব্যবহারের চেয়ে পরিপাটি হতে পারে। শুধুমাত্র অনুসন্ধান ফর্ম ব্লক দৃষ্টান্ত লক্ষ্যমাত্রার জন্য আমার সমাধান।
function eyecare_form_search_block_form_alter(&$form, $form_state) {
$form['keys']['#attributes']['placeholder'] = t('Search');
}