web-dev-qa-db-ja.com

カスタムVBOアクションを作成する方法は?

ノードの「変更された」タイムスタンプを更新せずに、ノードの用語参照を更新する必要があります。アクションとして「エンティティ値の変更」とともに [〜#〜] vbo [〜#〜] を使用すると、用語参照を更新できますが、「変更された」タイムスタンプも更新されます。

カスタムVBOアクションをコーディングするにはどうすればよいですか?

3
uwe

まず、changedタイムスタンプが更新される理由の説明。アクションは属性を宣言できます

'behavior' => array('changes_property')

hook_action_infoエントリ内。この属性により、アクションが呼び出された後、VBOは自動的にエンティティAPIの entity_save 関数を呼び出します。この関数は node_save を呼び出し、changedタイムスタンプを更新します。

この動作を回避するには、カスタムモジュールに hook_action_info を実装して独自のカスタムアクションを作成し、 サンプルモジュールaction_exampleに従います。属性がhook_action_info省略であることを確認してください

'behavior' => array('changes_property')

アクション関数は、データベースを直接操作するか、node_save呼び出しをトリガーしない関数を使用していることを確認して、ノードまたはその他のデータを保存する必要があります。

5
infojunkie

infojunkie による答えは正しいですが、単に次のように設定するのではなく、属性を完全に削除した場合:

'動作' => array()

その後、デフォルトで以下に戻ります。

'振る舞い' => array( 'changes_property')

その後、元の問題に戻ります。今日はしばらくの間、これは私にとっての落とし穴だったので、将来誰かの問題を解決することを望んでいます。

(詳細については、drupal.orgの https://www.drupal.org/project/views_bulk_operations モジュールの22-25行のplugins/operation_types/action.class.phpを参照してください。)

1
jboyette36

使用しているようです:

'behavior' => array()

vBOコードが空の場合にデフォルトを追加するため、まだデフォルトに戻ります($ this-> operationInfo ['behavior']))...

このセットの動作を回避するには、次のような他の(構成済みの動作は可能です)ようにします。

'behavior' => array('ignore')
0
dp1