コンテンツが削除される直前にコードを実行しようとしています。Rules モジュールには次のイベントがあります。
- 既存のコンテンツを更新した後
- コンテンツを保存する前に
- 新しいコンテンツを保存した後
- コンテンツ削除後
ただし、これらのどれも適切なタイミングでコードを実行しません。
削除前にコードを実行するためのフックを提供するPredeleteという単純なモジュールを発見しました。これは、ルール イベントを呼び出す優れた候補のように思えました。
そこで、Predelete に含まれる「predelete_field」サンプル モジュールに基づいて、非常に単純なモジュールを作成しました。フォルダーは「predelete_field」と呼ばれ、「modules」フォルダーにあり、次のファイルが含まれています。
1: predelete_field.info
core = "7.x"
dependencies[] = "rules"
dependencies[] = "list"
dependencies[] = "predelete"
description = "Example for the predelete module with a content type and a node"
name = "Predelete Field"
package = Other
project = "predelete_field"
version = "7.x-1.0"
; Information added by drupal.org packaging script on 2011-07-11
version = "7.x-1.1"
core = "7.x"
project = "predelete"
datestamp = "1310360219"
2: predelete_field.module
<?php
/**
* Implements hook_predelete_node().
*/
function predelete_field_predelete_node($node) {
drupal_set_message( "PREDELETE HOOK CALLED", 'warning' );
rules_invoke_event('predelete_field', $node);
$deletable = TRUE;
$reason = t('Deletable by default.');
return array('result' => $deletable, 'reason' => $reason);
}
3: predelete_field.rules.inc
<?php
/**
* Implements hook_rules_event_info() on behalf of the predelete_field module.
*/
function rules_predelete_field_event_info() {
$items = array(
'predelete_field_predelete' => array(
'label' => t('Before deleting content'),
'group' => t('Node'),
),
);
return $items;
}
残念ながら、これは機能していないようです。キャッシュをクリアし、モジュールを無効にしてから再度有効にしても、イベントはイベント リストに表示されません。同様に、drupal_set_message
関数は起動していないようです。
私が犯した可能性のあるエラーを見つけたり、解決策を提供したりできる人はいますか?