Как узнать, обновил ли пользователь поле профиля в Drupal 7 - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь определить, каким образом в drupal 7 я могу программно определить, обновлял ли пользователь пользовательское поле в своем профиле за последние 24 часа, однако, просматривая таблицы, я не могу найти ни одного поля с этой информацией,у кого есть идеи ??По сути, мне нужно извлечь эту информацию во время пакетного задания, которое запускается ночью, и обновляет другие системы на основе информации в drupal.Если кто-то может придумать лучший способ сделать это, это будет оценено.спасибо за любую помощь, вы можете предоставить

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

maged adel предоставил разумное решение, однако есть еще один способ сделать это: вы можете использовать hook_user_update для этой цели.Лучше, чем решение, представленное выше, по двум причинам: 1) у вас есть и $ edit - введенные значения, и $ account - значения учетной записи пользователя, так что вы можете сравнить и узнать, какие поля обновляются (если у вас нет 1 конкретного поляПроверять).2) просто 1 крючок для реализации.

2 голосов
/ 18 августа 2011

хорошо, я не знаю, работает ли он или нет, попробуйте следующие шаги

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 (этот URL поможет вам создать схему)

  • первая таблица будет содержать текущее значение поля, которое вы хотите отслеживать, поэтому я думаю, что эта таблица должна иметь следующие поля (первичный ключ, идентификатор пользователя, имя поля, значение поля)

  • во второй таблице будет указана дата последней операции, выполненной пользователем Я думаю, что поля будут выглядеть следующим образом (первичный ключ, идентификатор пользователя, имя поля, дата)

теперь давайте вернемся к функции отправки формы

/**
* 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
}   

надеюсь, вы меня поняли и извините за мой плохой английский

...