Программное изменение значения поля без вызова entity_save()
Пример программного изменения значения поля field_category у материала типа article:
Способ 1
$node = node_load(123);
$node->original = $node;
$node->field_category['und'][0]['tid'] = 345;
foreach (field_info_instances('node', 'article') as $field_name => $field_info) {
if ($field_name != 'field_category') {
unset($node->{$field_name});
}
}
field_attach_presave('node', $node);
field_attach_update('node', $node);
Замечание: обнуляет значения полей типа File или Image. Обойти баг можно не удаляя из $node эти поля.
По материалам Saving node's fields without saving the node itself.
Способ 2
$node = node_load(123);
$info = field_info_field('field_category');
$fields = array($info['id']);
field_sql_storage_field_storage_write('node', $node, 'update', $fields);
cache_clear_all("field:{$node->type}:{$node->nid}", 'cache_field');
Замечание: при таком способе не вызывается никаких хуков из Field API, т.е. обновлённое поле не будет проиндексировано и т.п.
Написанное актуально для
Drupal 7
Комментарии:
Нету комментариев для вывода...