Как обновить значение поля для узла?

Я хочу изменить значение поля для узла. Я использовал следующий код:


$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);

Проблема заключается в том, что $node->language возвращает es, а в print_r($node) - und. Почему $node->language отличается от того, что находится в массиве $ node и как я могу его получить?

20 голосов | спросил hpn 29 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 29 Sep 2011 19:24:21 +0400 2011, 19:24:21

5 ответов


40
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();

Оболочка метаданных Entity - отличный способ для установки или чтения значений полей в узле!

ответил kyvour 10 72013vEurope/Moscow11bEurope/MoscowSun, 10 Nov 2013 02:13:25 +0400 2013, 02:13:25
7
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
ответил lenni 19 Jpm1000000pmThu, 19 Jan 2012 20:23:15 +040012 2012, 20:23:15
6

Попробуйте field_attach_update().

$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);

Он обновит значение поля и будет работать лучше, чем node_save.

ответил zaibatsu 24 22015vEurope/Moscow11bEurope/MoscowTue, 24 Nov 2015 20:10:13 +0300 2015, 20:10:13
3

Если вы хотите обновить только значение поля (без обновления метаданных узла об обновленном времени, изменениях), используйте функцию field_attach_update().

Пример:

$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);

Иногда вам может потребоваться перезагрузить статический кеш узла с помощью resetCache(array($nid)):

entity_get_controller('node')->resetCache(array($node->nid));

Источник: Сохранение полей узла без сохранения самого узла

ответил milkovsky 14 Jpm1000000pmTue, 14 Jan 2014 14:16:12 +040014 2014, 14:16:12
2

Я только что реализовал это и обнаружил, что этот код работал для меня.

$node = node_load($nid); 
if (isset($node)) {
  $field_language = field_language('node', $node, 'field_myfield');
  $node->field_fieldname[$field_language][0]['value'] = 'some value';
  node_save($node);
}

Обратите внимание, что я, обновляя поле_имя поля, обнаружил, что используя это в строке 4

$node->field['field_myfield'][0]['value'] = 'some value';

не работает.

ответил Niccolo 5 J0000006Europe/Moscow 2014, 14:51:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132