创建一个drupal触发器(trigger)

在第八章中,我们用管理界面创建了一个触发器。不过在我们的安装大纲中,我们觉得在安装期间就配置好这个触发器比较好。 trigger API 并未提供一个插入触发器的函数。实际上,一个触发器只是数据库中的一行。因此,我们通过在数据库中插入一条记录来添加我们的触发器:

// Pre-configure our trigger from ch. 8:
// (see trigger.admin.inc)
$aid = 'sitenews_send_action';
$hook = 'nodeapi';
$op = 'presave';
$sql = 'INSERT INTO {trigger_assignments} '
       ."VALUES ('%s', '%s', '%s', 1)";
db_query($sql, $hook, $op, $aid);
// Rebuild the menu
menu_rebuild();

为了在 trigger 表中插入一条记录,我们需要四方面的信息:

  • Action ID (aid) 是目标动作的回调函数名。在我们的例子中,它是sitenews_send_action。
  • 监视事件的钩子的名称。在我们的例子中,我们正在寻找应该调用的 nodeapi钩子。trigger_nodeapi() 是监视此事件的钩子实现。
  • 应该监视的操作名称。只是将要传递给 trigger_nodeapi() 的操作。在我们的例子中,我们想要捕捉的是 presave 操作(或事件)。
  • 触发器的权重。如果一个事件触发了多个 action,trigger模块将返回按权重排序的 action,然后按顺序调用 action。我们把它设为1,也就是默认值。

在上述代码中,这四个参数被插入了 trigger_assignments 表。添加一个触发器,需要做的工作仅只于此。 在代码的最后,我们重建了菜单(menu_rebuild()),以便我们所做的影响菜单生成的变更可以在用户第一次登录前生效。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|