Je modifie un formulaire dans mon module personnalisé. Le code ressemble à:
function my_module_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "someID") {
$form['field_charity_author']['und'][0]['value']['#value'] = arg(3);
//$form['field_charity_author']['#type'] = 'hidden';
}
}
Cependant, je pense que le codage en dur und
est mauvais. Quelle devrait être la bonne façon de modifier correctement les champs du formulaire dans ce cas?
foreach
boucle. Si c'est juste LANGUAGE_NONE, c'est une seule exécution. Dans le sens de form_alter, il devrait techniquement modifier la langue du formulaire.Réponses:
Malheureusement, votre réponse personnelle n'est pas si universelle. Le langage de champ et le langage de nœud ne sont pas les mêmes choses.
La langue de champ n'est nécessaire que si vous utilisez l'API de traduction de champ (par exemple, la traduction d'entité ). Lorsque vous commencez à l'utiliser, certains champs sont convertis en traduisibles.
Les champs traduisibles ont un code de langue, ce qui est vraiment logique. Mais si le champ n'est pas traduisible, le code de langue sera toujours (et pour tous les types de contenu, entités, etc.) -
LANGUAGE_NONE
(préférable d'utiliser la constanteLANGUAGE_NONE
et non la chaîne'und'
).Ainsi, avec votre solution, vous pouvez obtenir une situation où un nœud est russe, mais un champ du nœud utilise
LANGUAGE_NONE
.Heureusement, les champs sont attachés au formulaire avec la
'#language'
clé, qui contient toujours le code de langue correct.Si vous n'avez pas accès au formulaire joint, les fonctions de l'API Field Language peuvent être utiles.
la source
Si vous connaissez le type d'entité et le bundle, utilisez quelque chose comme le code suivant, qui appelle field_language () .
Il trouvera la bonne langue et fonctionnera sur des sites multilingues.
Jetez également un œil à field_get_items () .
la source
L'ensemble de l'
und
accord est l'une des choses les plus ennuyeuses de Drupal 7 qui n'a pas fonctionné aussi bien dans la pratique que lors de sa conception.Quoi qu'il en soit, vous pouvez obtenir la première langue en utilisant
array_keys
comme ceci:Cela devrait fonctionner tout le temps.
la source
(Répondre à ma propre question au cas où cela aiderait quelqu'un. La réponse a fonctionné pour moi.)
Je peux écrire la ligne suivante pour obtenir la langue:
la source
re: la réponse de kalabro
son code n'a pas fonctionné pour moi - mon code est un peu différent
[$ lang] [0] a renvoyé "u" mais la valeur totale de [$ lang] est "und" et je n'avais pas non plus besoin de la ['valeur'], car $ form ['FIELDNAME'] ['# language' ] n'était pas un tableau, c'était une chaîne.
la source