Я начинаю использовать эту форму для доступа к данным в моем модуле. (См. Комментарий № 1. )
$node->field_test[$node->language][0]['value']
Я подумал, что это выглядело довольно хорошим решением, но дальше тот же вопрос я нашел вот так :
Не предполагайте, что 'und' для полей сущностей без языка, это также для полей, которые не могут быть переведены, и без модуля преобразования сущностей, который является всеми полями. Более того, между различными версиями Drupal 7.x есть различия.
Лучше использоватьfield_get_items()
функцию, которая будет сортировать для вас, под каким языковым кодом хранятся данные.
И теперь я не знаю, может ли то, что я использую, сломать что-то в будущем.
entity_metadata_wrapper()
устарела? Я попытался вызвать это в моем модуле, и я получилFatal error: Call to undefined function entity_metadata_wrapper()
- я также выполнил поиск исходного кода для моей установки Drupal 7.12 в Dreamweaver и нашел 0 результатов где-нибудь еще в коде!$node->field_name[LANGUAGE_NONE][0]['value'] = 'foo';
это действительно самый эффективный способ.Для чтения вы всегда должны использовать field_get_items () , который выберет правильный язык для вас, а также проверит, имеет ли поле какие-либо значения.
К сожалению, API поля очень ограничен в 7.x, нет способа получить, например, первый элемент поля, даже не осмеливаюсь спрашивать о получении значения одним вызовом функции ... И нет field_set_items ( ) аналог.
Так что да, модуль сущности API делает обеспечивает более хороший API с недостатком , что он также поставляется с довольно много накладных расходами (Это в основном преобразует каждое отдельное значение для объектов оберток , которые имеют тонны вложенной собственности Ставка массивов прикрепленных к ним). Попытка сбросить обертку сущности, как правило, ничего не даст вам или стену нечитаемых массивов.
источник
источник