我试图在删除内容之前执行一些代码。规则模块具有在模块中创建新事件
- 事件更新现有内容
- 将内容保存
- 保存新的内容
- 删除内容
但之后经过前处理后,这些都不执行我的代码在合适的时间。
我发现了一个简单的模块Predelete,它提供了在删除前执行代码的钩子。这似乎是一个很好的候选人来调用规则事件。
因此,我基于Predelete中包含的“predelete_field”示例模块创建了一个非常简单的模块。该文件夹被称为 “predelete_field”,是在 “模块” 的文件夹,并包含以下文件:
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;
}
不幸的是,这似乎不工作:事件d即使在清除缓存并禁用和重新启用模块后,它也不会显示在事件列表中。同样,drupal_set_message
函数似乎不会触发。
是否有人能够发现我可能犯的错误,或提供解决方案?