web-dev-qa-db-ja.com

entity_metadata_wrapper-> save()がノードのリビジョンを更新しないのはなぜですか?

ノードを更新するモジュールを開発しています(リビジョンを有効化)。こんな感じです。

_ $nodes = node_load_multiple(array(), array('type' => $bundleType));
 foreach ($ndoes as $node){
    $w = entity_metadata_wrapper('node',$node);
    $w->MyFields->set($someValue);
    $w->save();
 }
_

フィールドは正しく設定されましたが、ノードのリビジョンIDは$w->save()の後で変更されませんでした。

リビジョンIDを更新するにはどうすればよいですか?

8
zhuchun

コンテンツタイプのノードに新しいリビジョンの作成フラグが設定されていますか? $ w-> revision-> set(1);のように試しましたか?保存する前に? ....

編集:

著者は、$w->revision->set(1)を設定することで問題が解決すると言っています。

6
tenken

UIを介してノードを編集する場合、それは node_form() を介して行われます。これには、そのノードのデフォルト値を設定する node_object_prepare() への呼び出しが上部近くにあります。これには、新しいリビジョンが必要かどうかを判断するために node_save() によって使用される_$node->revision_のデフォルト値の設定が含まれます。

Entity APIはリビジョンに対応していますが、node_object_prepare()はノード固有のものです。これは、ノード編集フォームの動作を模倣するリビジョンプロパティの設定を含め、値を自分で管理する必要があることを意味します。

10
mpdonadio

これらの答えはどれも実際には正しくありません。->set(1)を実行すると、リビジョン番号が実際に変更されたように聞こえるため、インクリメントする必要があります。

これは実際にはブールフラグなので、正しい答えは$node->revision->set(true);です。

Zhuchunが言うように:彼はなぜそれが必要なのか理解していません、ブールフラグとして説明されるとき、それは数よりも完全に理にかなっています。

7
Gav_

ノードタイプでリビジョンがデフォルトで有効になっていない場合、新しいリビジョンをリクエストする最も簡単な方法は次のとおりです。

_$w->revision = TRUE;_

これは次のものを使用するのとまったく同じです:

$w->revision->set(TRUE);

しかし、タイピングが少なくて済みます。

0
Fonant