Zaczynam używać tego formularza, aby uzyskać dostęp do danych w moim module. (Patrz komentarz nr 1 ).
$node->field_test[$node->language][0]['value']
Pomyślałem, że to całkiem dobre rozwiązanie, ale w dalszej części tego samego pytania znalazłem to :
Nie zakładaj, że „und” odnosi się do pól encji bez języka, dotyczy to także pól, które nie podlegają tłumaczeniu, i bez modułu tłumaczenia encji, który jest wszystkimi polami. Co więcej, istnieją w tym różnice między różnymi wersjami Drupala w wersji 7.x.
Lepiej skorzystać zfield_get_items()
funkcji, która uporządkuje dla Ciebie kod języka, w którym przechowywane są dane.
A teraz nie wiem, czy to, czego używam, może coś zepsuć.
entity_metadata_wrapper()
jest przestarzała? Próbowałem wywołać to w moim module i dostałemFatal error: Call to undefined function entity_metadata_wrapper()
- przeszukałem również źródła w mojej instalacji Drupal 7.12 w Dreamweaver i znalazłem 0 wyników gdziekolwiek indziej w kodzie!$node->field_name[LANGUAGE_NONE][0]['value'] = 'foo';
to naprawdę najbardziej efektywny sposób.Do czytania zawsze powinieneś być w stanie używać field_get_items () , który wybierze dla ciebie odpowiedni język, a także sprawdzi, czy pole ma jakieś wartości.
Niestety, interfejs API pola jest bardzo ograniczony w 7.x, nie ma sposobu na uzyskanie np. Pierwszego elementu pola, nawet nie waż się pytać o uzyskanie wartości za pomocą pojedynczego wywołania funkcji ... I nie ma pól_zestaw_pola ( ) odpowiednik.
Więc tak, moduł podmiot API ma zapewnić ładniejszy API z tą wadą, że również pochodzi z dość trochę nad głową (to w zasadzie przekształca każdą wartość wrapper obiekty, które mają mnóstwo własności zagnieżdżonych tablic informacyjnych dołączonych do nich). Próba zrzucenia opakowania encji zazwyczaj nie zapewni ani niczego, ani ściany nieczytelnych tablic.
źródło
źródło