亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Drupal采用鉤子系統(tǒng)刪除用戶實例詳解

  發(fā)布時間:2014-11-06 10:16:53   作者:佚名   我要評論
這篇文章主要為大家介紹了Drupal采用鉤子系統(tǒng)刪除用戶的實現(xiàn)方法,對鉤子系統(tǒng)的運行機制做了較為詳細(xì)的敘述,具有很好的參考借鑒價值,需要的朋友可以參考下

本文實例講述了Drupal采用鉤子系統(tǒng)刪除用戶的方法,分享給大家供大家參考。具體實現(xiàn)方法如下:

鉤子(hook)系統(tǒng)是Drupal的一大特色,它通過回調(diào)一系統(tǒng)應(yīng)用某鉤子的函數(shù)來實現(xiàn)系統(tǒng)的靈活性和可擴展性

本文以“刪除用戶”這一行為為示例,講述Drupal鉤子系統(tǒng)的執(zhí)行機制。

“刪除用戶”的行為,很容易能夠想到Drupal所使用的函數(shù)是 user_delete();是通過 Drupal API 網(wǎng)站(http://api.drupal.org)搜索到 user_delete() 的源代碼。(為方便講解,在源代碼中添加了一些注釋)


復(fù)制代碼
代碼如下:
<?php
function user_delete($edit, $uid) {
$account = user_load(array('uid' => $uid)); // 加載用戶
sess_destroy_uid($uid); // 銷毀用戶會話(session)
_user_mail_notify('status_deleted', $account); // 為刪除用戶發(fā)送郵件通知
db_query('DELETE FROM {users} WHERE uid = %d', $uid); // 刪除 users 表中的記錄
db_query('DELETE FROM {users_roles} WHERE uid = %d', $uid); // 刪除 users_roles 表中的記錄
db_query('DELETE FROM {authmap} WHERE uid = %d', $uid); // 刪除 authmap 表中的記錄
$variables = array(
'%name' => $account->name,
'%email' => '<' . $account->mail . '>',
);
watchdog('user', 'Deleted user: %name %email.', $variables, WATCHDOG_NOTICE); // 記錄日志
user_module_invoke('delete', $edit, $account); // 調(diào)用所有應(yīng)用了 hook_user() 的模塊
}
?>

此函數(shù)分別做了幾件事,加載用戶、銷毀會話、用戶刪除郵件通知、清理User模塊相關(guān)表的條目。直到代碼的最后,我們沒有看到與 node 相關(guān)的內(nèi)容,但并不能這樣就認(rèn)為 Drupal 就只處理了User模塊相關(guān)的表。:D

在這里,我們要注意最后一個函數(shù) user_module_invoke(); Drupal 正是使用這個函數(shù),調(diào)用所有應(yīng)用了 hook_user 鉤子的函數(shù),優(yōu)雅地處理所有與用戶刪除相關(guān)的信息,這正是 Drupal 的美麗之處。

同樣,使用 Drupal API 查找 user_module_invoke(), 得到如下源代碼:


復(fù)制代碼
代碼如下:
<?php
function user_module_invoke($type, &$array, &$user, $category = NULL) {
foreach (module_list() as $module) { // 取得所有模塊列表,并輪循模塊是否應(yīng)用了 hook_user() 鉤子
$function = $module . '_user';
if (function_exists($function)) { // 對于應(yīng)用了鉤子的模塊,調(diào)用其鉤子函數(shù)實例
$function($type, $array, $user, $category);
}
}
}
?>

這段代碼即是說,從所有模塊中查找出應(yīng)用了 hook_user() 鉤子的函數(shù),并調(diào)用此函數(shù)。

我們想想,在執(zhí)行“刪除用戶”這個操作時,由該用戶所創(chuàng)建的節(jié)點內(nèi)容會怎么樣?因為節(jié)點模塊名為 node,所以我們其對應(yīng)的鉤子,即 node_user();

還是使用 Drupal API,查找 node_user() 函數(shù),得以下源代碼


復(fù)制代碼
代碼如下:
<?php
function node_user($op, &$edit, &$user) {
if ($op == 'delete') { // 如果操作為“刪除”
db_query('UPDATE {node} SET uid = 0 WHERE uid = %d', $user->uid); // 將此用戶創(chuàng)建的節(jié)點的作者ID改為0,即匿名用戶
db_query('UPDATE {node_revisions} SET uid = 0 WHERE uid = %d', $user->uid); // 將此用戶創(chuàng)建的節(jié)點修訂版本的作者也改為匿名用戶
}
}
?>

從上述代碼中可以看出,當(dāng) $op == 'delete' 時,函數(shù)會執(zhí)行一個表更新的操作,將節(jié)點的用戶ID(即uid)更新為 0 (即匿名用戶)。

因此,當(dāng)在刪除用戶時,此用戶所創(chuàng)建的節(jié)點和節(jié)點修訂版本全都會被改為匿名用戶所創(chuàng)建,因此刪除用戶不只執(zhí)行刪除用戶的操作,Drupal 通過鉤子系統(tǒng)調(diào)用所有與刪除用戶相關(guān)的操作,從而保證系統(tǒng)的穩(wěn)健、強壯、靈活和可擴展性。

希望本文所述對大家的PHP程序設(shè)計有所幫助。

相關(guān)文章

最新評論