web-dev-qa-db-ja.com

ルールでノード作成者を変更する

ユーザー参照フィールドであるfield_new_authorというコンテンツタイプのフィールドがあります。

変更するルールを作成する必要がありますNode作成者フィールドをfield_new_authorの値と一致させます。この解決策を試してみました: ルールを使用してノード保存でノード作成者を変更

しかし、データベースエラーが発生します:PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '4141-0-all' for key 'PRIMARY': INSERT INTO {node_access} (nid, realm, gid, grant_view, grant_update, grant_delete) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5); Array ( [:db_insert_placeholder_0] => 4141 [:db_insert_placeholder_1] => all [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => 1 [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => 0 ) in node_access_write_grants() (line 3440 of /home2/test/modules/node/node.module).

ルールで別の設定も試してみましたが、機能するものが見つかりませんでした。

1
hene

エンティティリファレンスでD7を使用していると思います。 PHPコードなしで、ストックルールを使用してこれを実行できるはずです。

  1. 新しいルールを作成する
  2. イベント、「既存のコンテンツを更新した後」を選択
  3. 条件、「コンテンツのタイプ」を選択して、どのタイプのコンテンツにも一致します。これにより、後で使用できるようにフィールドが修飾されます
  4. 条件、他の制限条件を選択して、更新されたコンテンツですべてのノードをターゲットにしないようにします。たとえば、データ比較を実行して、コンテンツに特定の分類用語が含まれているかどうかを確認できます
  5. アクション、「データ値の設定」を選択します。ターゲットはnode(updated content):authorである必要があります。新しい値はnode(updated content):field-new-authorである必要があります
1
ouni

私はルールモジュールの経験があまりないので、その点についてはお手伝いできません。ただし、独自のモジュールを作成してこのフックを実装することもできます。

hook_node_presave

このフックを使用すると、データベース内でノードオブジェクトを保存または更新する前にノードオブジェクトを変更できます。その後、Node authorの値を、独自のモジュール内のUser参照フィールドの値に変更できます。最初にノードのコンテンツタイプをチェックして、値が目的のノード。

0
Alex Kirsten