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


21

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


$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配列にある$node->languageものと異なるのですか?どうすれば取得できますか?

回答:


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

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


entity_metadata_wrapper bcの方が好きです。不注意でentity_metadata_wrapper()にNULLを渡す際の厄介なエラーを回避するために、node_load()の後に$ nodeが存在するかどうかのチェックを含めます。
テキサスブロニウス

$ nidをEMWに直接渡すことができます。
-nawfal

entity_metadata_wrapperを使用することは、受け入れられた答えでなければなりません。
akalata

2
場合には、それが他の人には自明ではない、entity_metadata_wrapperは()エンティティAPIモジュールの一部です:drupal.org/project/entity
BWPanda

9

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ます。


1
field_attach_updateがダウン投票される理由
ミルコフスキー

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

4

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

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


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

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

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

動作しませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.