답변:
그것은 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
함수에 추가 된 텍스트 (예 : 이미지 필드의 alt 및 제목 텍스트 필드)를 제외하고 양식의 거의 모든 텍스트 필드에 적용됩니다 .
나는 Clive의 대답을 시도했다.
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');
}
}
다음 코드와 같이 양식 필드 요소의 #attributes 배열에 자리 표시자를 추가하면됩니다.
$form['my_textfield'] = array(
'#type' => 'textfield',
'#attributes' => array(
'placeholder' => t('My placeholder text'),
),
);
이것을 우연히 발견하고 Clive의 대답은 자동으로 자리 표시자를 추가하는 것이 좋았다고 생각했습니다.
drupal 8에서 올바르게 적용하려면 약간의 변경이 필요하므로 여기에 거의 동일한 대답이 있지만 drupal 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]);
}
}