Modyfikuję w formularzu w moim module niestandardowym. Kod wygląda następująco:
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';
}
}
Myślę jednak, że kodowanie und
jest złe. Jaki powinien być właściwy sposób prawidłowej modyfikacji pól formularza w tym przypadku?
foreach
pętli. Jeśli jest to po prostu LANGUAGE_NONE, to jest to pojedynczy przebieg. W sensie form_alter powinno ono technicznie zmieniać bez względu na język formy.Odpowiedzi:
Niestety twoja odpowiedź nie jest tak uniwersalna. Język pola i język węzła to nie to samo.
Język pola jest potrzebny tylko wtedy, gdy używasz interfejsu API tłumaczenia pola (na przykład Tłumaczenie encji ). Kiedy zaczniesz go używać, niektóre pola są konwertowane na możliwe do przetłumaczenia.
Pola do tłumaczenia mają kod języka, co naprawdę ma sens. Ale jeśli pola nie można przetłumaczyć, kod języka zawsze będzie (i dla wszystkich typów treści, encji itp.) -
LANGUAGE_NONE
(najlepiej użyć stałej,LANGUAGE_NONE
a nie ciągu'und'
).Dzięki temu rozwiązaniu możesz uzyskać sytuację, gdy węzeł jest rosyjski, ale korzysta z niego pole
LANGUAGE_NONE
.Na szczęście pola są dołączane do formularza za pomocą
'#language'
klucza, który zawsze zawiera poprawny kod języka.Jeśli nie masz dostępu do załączonego formularza, funkcje interfejsu API języka polowego mogą być przydatne.
źródło
Jeśli znasz typ jednostki i pakiet, użyj czegoś takiego jak następujący kod, który wywołuje field_language () .
Wypracuje właściwy język i będzie działał w witrynach wielojęzycznych.
Zobacz także field_get_items () .
źródło
Całość
und
sprawa jest jedną z bardziej irytujących rzeczy w Drupal 7, która nie działała tak dobrze w praktyce, jak wtedy, gdy została zaprojektowana.W każdym razie możesz uzyskać pierwszy język, używając
array_keys
takiego:To powinno działać cały czas.
źródło
(Odpowiadając na moje pytanie, na wypadek, gdyby to komuś pomogło. Odpowiedź zadziałała dla mnie).
Mogę napisać następujący wiersz, aby uzyskać język:
źródło
re: odpowiedź kalabro
jego kod nie działał dla mnie - mój kod jest trochę inny
[$ lang] [0] zwrócił „u”, ale pełna wartość [$ lang] to „und” i ja też nie potrzebowałem [„wartości”], ponieważ $ form ['FIELDNAME'] ['# język' ] nie był tablicą, był łańcuchem.
źródło