ノードのフィールドの値を変更したいのですが、次のコードを使用しました。
_
$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配列の内容とは異なり、どのように取得できますか?
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();
エンティティメタデータラッパーは、ノードのフィールドの値を設定または読み取るための優れた方法です。
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
よりもパフォーマンスが向上します。
$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);
フィールド値のみを更新したい場合(更新された時刻、リビジョンに関するノードメタデータを更新せずに)、関数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));
_
私はこれを実装したばかりで、このコードがうまくいくことがわかりました。
$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';
動作しませんでした。