Özel modülümdeki bir formda değişiklik yapıyorum. Kod şuna benzer:
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';
}
}
Ancak, zor kodlama und
kötü olduğunu düşünüyorum. Bu durumda form alanlarını doğru şekilde değiştirmenin uygun yolu ne olmalıdır?
Ne yazık ki, kendi yanıtınız o kadar evrensel değil. Alan dili ve düğüm dili aynı şey değildir.
Alan dili yalnızca Alan Çevirisi API'sını kullanıyorsanız gereklidir (örneğin Varlık çevirisi ). Kullanmaya başladığınızda, bazı alanlar çevrilebilir duruma dönüştürülür.
Çevrilebilir alanlar, gerçekten mantıklı olan dil koduna sahiptir. Ancak alan çevrilebilir değilse, dil kodu her zaman (ve tüm içerik türleri, varlıklar vb. İçin) olacaktır - LANGUAGE_NONE
(dizeyi değil LANGUAGE_NONE
sabitini kullanmak en iyisidir 'und'
).
Çözümünüzle bir düğüm Rusça olduğunda bir durum elde edebilirsiniz, ancak düğümün bir alanı LANGUAGE_NONE
kullanıyorsa.
Ne mutlu ki, alanlar her zaman doğru dil kodunu içeren '#language'
tuşuyla forma eklenir.
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang][0]['value']['#value'] = $value;
Eklenmiş forma erişiminiz yoksa, Alan Dili API işlevleri faydalı olabilir.
Varlık türünü ve paketini biliyorsanız, field_language () çağıran aşağıdaki kod gibi bir şey kullanın.
$field_language = field_language('node', $node, 'field_charity_author');
$form['field_charity_author'][$field_language][0]['value']['#value'] = arg(3);
Doğru dili anlayacak ve çok dilli sitelerde çalışacaktır.
Ayrıca field_get_items () adresine bir göz atın.
Tüm und
anlaşması Drupal 7) tasarımında olduğu gibi pratikte işe yaramayan daha can sıkıcı şeylerden biridir.
Her neyse array_keys
bunun gibi:
function my_module_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "someID") {
$langs = array_keys($form['field_charity_author']);
$form['field_charity_author'][$langs[0]][0]['value']['#value'] = arg(3);
}
}
Bu her zaman işe yarar.
re: kalabro'nun cevabı
kodu benim için çalışmadı - kodum biraz farklı
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang]['#value'] = $value;
[$ lang] [0] "u" döndürdü ancak [$ lang] ifadesinin tam değeri "und" ve ['değer'] 'e de ihtiyacım yoktu, çünkü $ form [' FIELDNAME '] [' # dil ' ] bir dizi değil, bir dizeydi.
(Birine yardım etmesi durumunda kendi sorumu cevaplamak. Cevap benim için çalıştı.)
Dili almak için aşağıdaki satırı yazabilirim:
$lang = $form['language']['#value']; // Instead of "und"