Câu trả lời:
Mặc dù cách tiếp cận này sử dụng các mô-đun, tôi thêm các nút sau khi người dùng xác nhận e-mail của họ bằng Logintoboggan và Rules . Tích hợp quy tắc Logintoboggan thêm một sự kiện mới, When the user account is validated
cho phép bạn thực hiện các hành động khi xác nhận e-mail.
Đây là công việc cho tôi:
/**
* Implements @see hook_user_presave
*/
function hook_user_presave(&$edit, $account, $category) {
if ($account->uid // user is not new
&& $account->status === "0" && $edit['status']==1) { // user is being activated
}
}
if($account->uid && $account->original->status == 0 && $account->status == 1)
Nếu bạn đang sử dụng mô-đun LoginToboggan để xác thực e-mail và bạn không muốn sử dụng mô-đun quy tắc, bạn có thể chỉ cần bắt chước phản hồi xác thực của mô-đun (khai thác thuộc logintoboggan_email_validated = TRUE
tính tài khoản tạm thời được đẩy vào hook_user_update) trong mã:
/**
* Implement hook_user_update()
*
*/
function yourcustommodule_user_update(&$edit, $account) {
if (!empty($account->logintoboggan_email_validated) && !isset($account->your_custom_action)) {
$account->your_custom_action = TRUE;
// Do what you want here
}
}
Vì lõi và các mô-đun khác cũng sẽ gọi hook_user_update bạn muốn thực hiện một cái gì đó để tránh các hành động lặp đi lặp lại. Trong ví dụ này, tôi đặt một thuộc tính khác trên tài khoản $ sau khi hành động được bắt đầu nhưng bạn có thể áp đặt kiểm soát tốt hơn nếu cần thiết.
Lưu ý rằng nếu sử dụng LoginToboggan để xác thực e-mail tự động, phương thức của IOco sẽ không hoạt động (trong số nhiều lý do - trong quá trình hook_user_presave, $ account-> status == 1 (đó chỉ là vai trò trong "quyền được ủy quyền" được bầu của bạn tiểu bang).