Existe-t-il un moyen de convertir un formulaire standard et d'ajouter des espaces réservés avec un module, ou cela devrait-il être fait avec un modèle de formulaire ou avec jQuery?
22
C'est un espace réservé HTML5, vous pouvez simplement l'ajouter comme attribut à n'importe quel élément et les navigateurs compatibles HTML5 réagiront en conséquence:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_form') {
$form['some_element']['#attributes']['placeholder'] = t('Placeholder text');
}
}
Une fonction récursive courte comme celle-ci peut être utile si vous souhaitez ajouter automatiquement des espaces réservés pour chaque champ de texte dans un formulaire (basé sur le titre du champ dans cet exemple):
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]);
}
}
Ensuite, dans votre formulaire alter fonction, appelez simplement
MYMODULE_auto_placeholders($form);
Cette méthode fonctionnera pour à peu près tous les champs de texte d'un formulaire, à l'exception de ceux qui sont ajoutés dans les #process
fonctions (comme les champs de texte alt et title d'un champ d'image par exemple).
J'ai essayé la réponse de Clive:
Mais à ma grande surprise, j'ai obtenu l'espace réservé dans le wrapper de textfield, pas textfield lui-même. J'ai ensuite essayé une variante comme suit, ça a marché!
la source
Ajoutez simplement l'espace réservé dans le tableau #attributes pour l'élément de champ de formulaire, comme dans le code suivant.
la source
Je suis tombé sur cela et j'ai pensé que la réponse de Clive semblait agréable d'ajouter automatiquement des espaces réservés.
Toi, quelques changements mineurs sont nécessaires pour bien faire les choses dans Drupal 8, alors voici à peu près la même réponse, mais adaptée à votre thème Drupal 8.
la source
Si vous souhaitez cibler une instance de formulaire directement, utilisez hook_form_FORM_ID_alter. Pourrait être plus ordonné que l'utilisation de conditionnels. Ma solution pour cibler l'instance de bloc de formulaire de recherche uniquement.
la source