Я изменяю форму в моем пользовательском модуле. Код выглядит так:
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';
}
}
Тем не менее, я думаю, что жесткое кодирование und
это плохо. Каким должен быть правильный способ корректного изменения полей формы в этом случае?
foreach
цикла. Если это просто LANGUAGE_NONE, это один запуск. В смысле form_alter, он должен технически изменить любой язык формы.Ответы:
К сожалению, ваш ответ не так универсален. Язык полей и язык узлов не одно и то же.
Язык полей необходим только в том случае, если вы используете API перевода полей (например, перевод сущностей ). Когда вы начинаете использовать его, некоторые поля преобразуются в переводимые.
У переводимых полей есть код языка, который действительно имеет смысл. Но если поле не переводимо, код языка всегда будет (и для всех типов контента, сущностей и т. Д.) -
LANGUAGE_NONE
(лучше всего использовать константу,LANGUAGE_NONE
а не строку'und'
).Таким образом, с вашим решением вы можете получить ситуацию, когда узел является русским, но поле узла использует
LANGUAGE_NONE
.К счастью, поля прикрепляются к форме с
'#language'
ключом, который всегда содержит правильный код языка.Если у вас нет доступа к прикрепленной форме, могут быть полезны функции API Field Language .
источник
Если вы знаете тип сущности и комплект, используйте что-то вроде следующего кода, который вызывает field_language () .
Он определит правильный язык и будет работать на многоязычных сайтах.
Также взгляните на field_get_items () .
источник
Вся эта
und
сделка - одна из самых раздражающих вещей в Drupal 7, которая не сработала так хорошо на практике, как когда она была разработана.В любом случае вы можете получить первый язык, используя
array_keys
это:Это должно работать все время.
источник
(Отвечая на мой вопрос на случай, если это кому-нибудь поможет. Ответ сработал для меня.)
Я могу написать следующую строку, чтобы получить язык:
источник
Re: ответ Калабро
его код не работает для меня - мой код немного отличается
[$ lang] [0] вернул "u", но полное значение [$ lang] равно "und", и мне также не понадобилось ['value'], потому что $ form ['FIELDNAME'] ['# language' ] не был массивом, это была строка.
источник