如何编辑特定的cck字段(更改值)时,如何向特定角色发送电子邮件

时间:2011-08-07 16:40:11

标签: drupal cck

标题解释了我的问题。我想在编辑节点并更改特定字段的值时向具有特定角色的用户发送电子邮件。有什么模块可以帮助我吗?

由于我是drupal模块开发的新手,我尝试编写自己的模块但是如何在编辑之前获取旧的字段值,以便我可以比较并查看字段是否已更改?

我还想提供一种简单的方法来更改该字段值,而无需转到编辑页面。由于我经常更改该字段值,而许多其他没有经验的用户也会这样做。我打算使用flag模块来实现该功能,但是这个字段有三个状态而不是两个。所以我不能使用标志模块。

提前致谢

2 个答案:

答案 0 :(得分:1)

什么版本的Drupal?

在Drupal 6中,您可以使用hook_nodeapi附加到节点上的更改,并使用node_load的可选参数来比较旧节点和新节点中的字段。

<?php
/**
 * Implementation of hook_nodeapi().
 */
// fires mymodule_send_email() when the field 'specialfield' on nodes
// of type 'specialnodetype' is updated
function mymodule_nodeapi($node, $op, $a3, $a4) {
  if ($node->type == 'specialnodetype' && $op == 'update') {

    // $node stores the "old node" and $new_node stores the "new node"
    // we're about to save
    $new_node = node_load($node->nid,null,true);

    // if a particular field doesn't match, fire a particular action
    if ($node->field_specialfield[0]['value'] !=
        $new_node->field_specialfield[0]['value']) {
      mymodule_send_email();
    }

  }
}
?>

您可以使用类似的hook_nodeapi实现自动更新字段,而无需手动重新调用node_save

请注意,存储在CCK字段中的内容并不总是作为“值”检索,因为CCK字段有多种风格并且可以包含多个部分。您始终可以使用print_r查看部件, 总是会像这样检索/分配

<?php
// Displays an associative array with keys and values of the first instance
// of the CCK field 'fieldname'
print_r($node->field_fieldname[0]);

// Displays an associative array with keys and values of the third instance
// of the CCK field 'fieldname'
print_r($node->field_fieldname[2]);
?>

(第二个示例是针对在节点中采用多个值的字段。)

如果需要,请随时回复更多详情。

答案 1 :(得分:0)

非自定义模块方式是使用Rules module,这允许您在更改CCK值时向特定角色的用户发送电子邮件。它是为了完成您描述的任务(以及基于事件触发器的任何其他类型的任务)而编写的。

如果您正在寻找特定问题的解决方案,则规则应该完全符合您的需求。如果这是一个个人项目,并且您想深入研究代码,那么编写自定义模块将有助于您了解Drupal的工作原理。