Saya memodifikasi dalam formulir di modul khusus saya. Kode terlihat seperti:
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';
}
}
Namun, saya pikir hard-coding und
itu buruk. Apa yang harus menjadi cara yang tepat untuk memodifikasi bidang formulir dengan benar dalam kasus ini?
foreach
loop. Jika hanya LANGUAGE_NONE, itu hanya sekali jalan. Dalam pengertian form_alter, harus secara teknis mengubah bahasa apa pun yang dimiliki formulir.Jawaban:
Sayangnya, jawaban-diri Anda tidak terlalu universal. Bahasa bidang dan bahasa simpul bukan hal yang sama.
Bahasa bidang hanya diperlukan jika Anda menggunakan API Terjemahan Bidang (misalnya terjemahan Entitas ). Ketika Anda mulai menggunakannya, beberapa bidang dikonversi menjadi dapat diterjemahkan.
Bidang yang dapat diterjemahkan memiliki kode bahasa, yang benar-benar masuk akal. Tetapi jika bidang tidak dapat diterjemahkan, kode bahasa akan selalu (dan untuk semua jenis konten, entitas, dll) -
LANGUAGE_NONE
(terbaik menggunakan konstantaLANGUAGE_NONE
dan bukan string'und'
).Jadi dengan solusi Anda, Anda bisa mendapatkan situasi ketika sebuah simpul adalah Rusia, tetapi bidang simpul menggunakan
LANGUAGE_NONE
.Untungnya, bidang dilampirkan ke formulir dengan
'#language'
kunci, yang selalu berisi kode bahasa yang benar.Jika Anda tidak memiliki akses ke formulir terlampir, fungsi API Bahasa Bidang dapat bermanfaat.
sumber
Jika Anda tahu tipe entitas dan bundel gunakan sesuatu seperti kode berikut, yang memanggil field_language () .
Ini akan mencari tahu bahasa yang tepat, dan akan bekerja di situs multibahasa.
Lihat juga field_get_items () .
sumber
Seluruh
und
kesepakatan adalah salah satu hal yang lebih menyebalkan dalam Drupal 7 yang tidak berfungsi dengan baik dalam praktiknya seperti ketika dirancang.Bagaimanapun Anda bisa mendapatkan bahasa pertama menggunakan
array_keys
seperti ini:Itu harus bekerja sepanjang waktu.
sumber
(Menjawab pertanyaan saya sendiri kalau-kalau itu membantu seseorang. Jawabannya berhasil untuk saya.)
Saya dapat menulis baris berikut untuk mendapatkan bahasa:
sumber
re: jawaban kalabro
kodenya tidak berfungsi untuk saya - kode saya sedikit berbeda
[$ lang] [0] mengembalikan "u" tetapi nilai penuh [$ lang] adalah "und" dan saya juga tidak memerlukan ['nilai'], karena $ form ['FIELDNAME'] ['# language' ] bukan sebuah array, itu adalah sebuah string.
sumber