Как стать автором
Обновить

Комментарии 15

Берем 3 функции (отлично документированные в API) и пишем топик на хабр. Profit!
В следующий раз напишите про другие 3 функции, вдруг кто-то о них не знает.
Да, я видел, что это перевод.
Да, обращение, скорее не к переводчику, а к автору.
А по моему нормальная и достаточно полезная статья, особенно для начинающих друпалистов.
$output = field_view_field('node', $node, 'field_name');

На самом деле этот код вернет рендер массив а не НТМЛ
Что бы получить НТМЛ нужно его отрендерить:
$output = render(field_view_field('node', $node, 'field_name'));
Читайте api.drupal.org, посоны! Там еще много интересного!

Хотя не, не читайте, меньше конкурентов.
Уж лучше читать. Чтобы конкуренты не разбегались по другим ЦМС и не уводили к ним клиентов
Тут чувствуется, что у автора наболело :-), чёткое выражение того, что ему не очень хочется теперь работать с кодом, который ему достался вместе с заказчиком от предыдущих команд и этакий крик души «ребята, давайте API использовать». На самом деле, я за свою историю тоже повидал всяких извращений и не только с полями. Автор молодец, писать надо правильно!
Получается, что для получения одного значения одного поля ноды мне нужно загрузить весь объект ноды. Может я чего-то не понимаю, но как тут насчет производительности? Выдернуть это значение строчкой запроса как бы легче.
Значения полей сущности актуальны в контексте вывода самой сущности. В моей практике не возникало необходимости выводить значения полей отдельно от самой сущности.

Но если стоит именно такая задача — да, сделать запрос к БД предпочтительнее.
НЛО прилетело и опубликовало эту надпись здесь
Не нужно панически бояться загрузки ноды, поскольку она кешируется. Когда речь идет о сотнях нод, то конечно нужно искать какие то альтернативы.
Точно так же, как и для safe_value:

$content = field_view_field('node', $node, 'field_name');

Или я неверно понял Ваш вопрос?
Все, дошло. Чтобы сохранить программно значение поля, необходимо загрузить объект сущности(ноды в Вашем случае), присвоить значение полям и сохранить сущность. Примерно так:

$node = node_load($nid);
$node->field_name[$node->language][0]['value'] = $value;
$node->field_name[$node->language][0]['safe_value'] = check_plain($value);
node_save($node);

Если нода имеет нейтральный язык, вместо $node->language используйте «und».
Странное форматирование в тэгах «code», но всё же код прикреплю =)

создание/редактирование field collection: drupal.org/node/1842304

$fc_item = entity_create('field_collection_item', array('field_name' => 'field_text_files')); $fc_item->setHostEntity('node', $my_node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); $fc_wrapper->field_source_txt_filename->set('my_text_file.txt'); $fc_wrapper->save(true); node_save($my_node);

создание/редактирование обычного материала: www.leveltendesign.com/blog/randall-knutson/if-you-arent-using-entity-api-create-nodes-you-are-doing-it-wrong#.UPjgNx02YcQ

$node = new EntityDrupalWrapper('node', 1); $node->field_reference[0]->set(463); // Note that this is a multi value field. $node->field_text->set('Some Value'); // Note that this is a single value field. $node->save();
Какой-то Хабр злой стал. Нормальная статья для начинающих друпалистов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории