Estou modificando um formulário no meu módulo personalizado. O código se parece com:
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';
}
}
No entanto, acho que a codificação und
é ruim. Qual deve ser a maneira correta de modificar corretamente os campos do formulário neste caso?
foreach
loop. Se for apenas LANGUAGE_NONE, é uma corrida única. No sentido form_alter, deve alterar tecnicamente qualquer que seja o idioma do formulário.Respostas:
Infelizmente, sua resposta automática não é tão universal. Idioma de campo e idioma do nó não são as mesmas coisas.
O idioma do campo é necessário apenas se você estiver usando a API de conversão de campo (por exemplo, tradução de entidade ). Quando você começa a usá-lo, alguns campos são convertidos em traduzíveis.
Os campos traduzíveis possuem código de idioma, o que realmente faz sentido. Mas se o campo não puder ser traduzido, o código do idioma será sempre (e para todos os tipos de conteúdo, entidades, etc.) -
LANGUAGE_NONE
(melhor usar a constanteLANGUAGE_NONE
e não a string'und'
).Portanto, com sua solução, você pode obter uma situação quando um nó é russo, mas um campo do nó usa
LANGUAGE_NONE
.Felizmente, os campos são anexados ao formulário com a
'#language'
chave, que sempre contém o código de idioma correto.Se você não tiver acesso ao formulário anexado, as funções da API de linguagem de campo podem ser úteis.
fonte
Se você conhece o tipo e o pacote de entidades, use algo como o código a seguir, que chama field_language () .
Ele descobrirá o idioma certo e funcionará em sites multilíngues.
Veja também field_get_items () .
fonte
O
und
negócio todo é uma das coisas mais irritantes do Drupal 7 que não funcionaram tão bem na prática quanto quando foram projetadas.De qualquer forma, você pode obter o primeiro idioma usando
array_keys
assim:Isso deve funcionar o tempo todo.
fonte
(Respondendo à minha própria pergunta, caso isso ajude alguém. A resposta funcionou para mim.)
Eu posso escrever a seguinte linha para obter o idioma:
fonte
re: resposta de kalabro
o código dele não funcionou para mim - meu código é um pouco diferente
[$ lang] [0] retornou "u", mas o valor total de [$ lang] é "und" e também não era necessário o ['value'], porque $ form ['FIELDNAME'] ['# language' ] não era uma matriz, era uma string.
fonte