Это перевод моего блогпоста Writing robust code that uses fields, in Drupal 7
В семерке изменился способ прямого доступа к полям (cck в друпале 6.x). В шестерке мы пишем:
<?php
$field_val = $node->field_yourfield[0]['value'];
?>
В семерке уже надо писать:
<?php
$field_val = $node->field_yourfield[LANGUAGE_NONE][0]['value'];
?>
(во всяком случае, так рекомендуют писать официальные доки).
То есть, у нас появилось разделение значений поля по языкам.
Я уж не знаю, насколько это упростило создание кода, который хорошо работает с несколькими языками (сложных мультиязычных проектов в d7 я пока не делал) - надеюсь, упростило серьезно, но для "обычных" сайтов с одним активным языком этот подход добавляет некоторую головную боль разработчикам.
Проблема здесь в том, что надеяться на правильную работу константы LANGUAGE_NONE нельзя!
В небольшом очерке я рассмотрю варианты решения этой проблемы.
Прочитать статью: http://sidashin.ru/blog/safe-drupal7-fields-code
Комментарии
Спасибо за статью.
Спасибо! Статей по Entity API не достаёт.
Коллега, привет!
___
Коллега, на стринмце, где у вас сама статья расположена никак не получается оставить комментарий - там капча как-то нетак работает.
А ниже то, что я там пытался оставить.
___
Здорово написано!
А где можно подробнее почитать? На английском тоже подойдет.
А еще у вас ошибока в примере кода
$node = node_load(323);
$wrapper = entity_metadata_wrapper('node', $wrapper);
Все-таки там в параметрах $node надо указать.
Еше раз спасибо