web-dev-qa-db-ja.com

ノードのフィールド値を更新する方法は?

ノードのフィールドの値を変更したいのですが、次のコードを使用しました。

_
$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配列の内容とは異なり、どのように取得できますか?

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

エンティティメタデータラッパーは、ノードのフィールドの値を設定または読み取るための優れた方法です。

42
kyvour

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よりもパフォーマンスが向上します。

10
zaibatsu
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
6
lenni

フィールド値のみを更新したい場合(更新された時刻、リビジョンに関するノードメタデータを更新せずに)、関数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));
_

ソース: ノード自体を保存せずにノードのフィールドを保存

4
milkovsky

私はこれを実装したばかりで、このコードがうまくいくことがわかりました。

$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);
}

Field_fieldnameを更新するときに、これを4行目で使用していることがわかりました。

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

動作しませんでした。

2
Niccolo