如何判断用户是否在Drupal 7中更新了配置文件字段

时间:2011-08-17 12:48:01

标签: php drupal drupal-7

我正在尝试确定如何在drupal 7中我可以通过编程方式判断用户是否在过去24小时内更新了他们的个人资料中的自定义字段,但查看表格我似乎无法找到任何包含该信息的字段有人有主意吗??基本上我需要在一个晚上运行的批处理作业中提取这些信息,并根据drupal中的信息更新其他系统。如果有人能够想出一个更好的方式,那么我们将不胜感激。感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:2)

好吧我不知道它的工作与否是否可以尝试以下步骤

1-首先你应该告诉drupal ....当用户编辑个人资料页面做某事......(无论什么东西是...插入数据库的东西......反正某事......等等)

/**
* Implementation of hook_form_alter
*/
function newcontent_form_alter(&$form, &$form_state, $form_id){
if($form_id == 'user_profile_form'){
    $form['#submit'][]  = '_do_something_when_user_save_profile';   
}    
}   


/**
* do something when user save profile
*/
function _do_something_when_user_save_profile($form,$form_state){
// do something
}   

现在我认为我们需要做一些查询......首先我们需要创建2个表 http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_schema/7 (此网址将帮助您创建架构)

  • 第一个表格将包含您想要跟踪的字段的当前值,所以我认为此表应包含以下字段 (主键,用户ID,字段名称,字段值)

  • 第二个表将包含用户进行的上次操作的日期 我认为字段将类似于以下(主键,用户ID,字段名称,日期)

现在让我们返回表单提交功能

/**
* do something when user save profile
*/
function _do_something_when_user_save_profile($form,$form_state){
   // now i can check in the first table to see
       // is the current submitted value for this field = the value in the table
       // if its = the table value then the user didn't change any thing now i dont 
       // need to update the second table
       // if the current submitted value != the value in the table then its mean
       // that the user have updated this field ... 
       // now i should insert new value to the second 
       // table with the current date time and the current field value
}   

我希望你站在我的立场,对不起我的坏英语

答案 1 :(得分:2)

maged adel提供了合理的解决方案,但还有一种方法可以做到这一点: 您可以使用hook_user_update来实现此目的。由于以下两个原因,上面提供的解决方案更好: 1)您同时拥有$ edit - 输入值和$ account - 用户帐户值,因此您可以比较并了解要更新的字段(如果您没有要检查的特定字段)。 2)只需1个钩子即可实现。