質問: ノードが「公開済み」から「非公開」に変更されたことをどのように検出できますか? hook_node_update() では、更新後のノードの「ステータス」(公開されているかどうかにかかわらず)を簡単に確認できます。しかし、更新されたノードが公開されたかどうかを確認する簡単な方法はありますか、今は公開されていませんか? (またはその逆)?ルールには「ノード値が変更された」などの条件があると思いますが、プログラムでこれを実行したいと思います。drupal 7でこれに対処しているように見えるdrupal.orgで fagoによるこの問題 (ルールの開発者)を見つけましたが、いい説明をいただければ幸いです。
回答: 気にしないで。上記のリンクされた問題(特に コメント#38 )を読んだ後、$ nodeオブジェクト(実際には任意のエンティティ)が「元の」キャッシュコピーを$ entity-> originalに保存していることがわかりました。したがって、ノードが 'status = 1'から 'status = 0'に変化したかどうかを検出したかったのです(これはノードが非公開のときに発生します)。次のコードはこれを実行します。<?php function custom_node_update($node) { if ($node->type == 'article') { // act on the unpublishing of an article. if ($node->original->status == 1 && $node->status == 0) { // do something here. } // act on the publishing of an article. if ($node->original->status == 0 && $node->status == 1) { // do something here. } } } ?>