[Drupal 6] 我的预处理功能是
function blogs_additions_preprocess_user_profile(&$variables) {
global $user;
$op = '';
$op .= l(t('Delete All My Blogs'),$_GET["q"],array('query' => 'delete=myBlogs'));
$variables['profile'] = array('content_profile' => $op);
$variables['user_profile'] = implode($variables['profile']);
}
我的hook_menu是
function blogs_additions_menu(){
$items= array();
$items['users/%?delete=myBlogs'] = array(
'page callback' => 'delete_all_blogs',
'access arguments' => array('access blogs additions'),
'type' => MENU_CALLBACK,
);
return $items;
}
和我的delete_all_blogs()
function delete_all_blogs(){
global $user;
$sql = "SELECT nid FROM node node WHERE node.uid='".$user->uid."'AND node.type='blog'";
$result = db_query($sql);
while ($row = db_fetch_object($result)) {
//print $sql;
node_delete($row->nid);
}
drupal_set_message('test', 'test');
}
我的用户可以像这样查看他们的个人资料 www.mysite.com/users/barack-obama
我的钩子似乎不起作用。可能是网址中使用%的错误。我不知道如何使用它通用,以便它可以工作。
答案 0 :(得分:3)
你绝对不想要:
$items['users/%?delete=myBlogs']
相反,您可能需要一个生成确认表单的回调。 [...发出文字“你确定要删除所有博客吗?”然后把实际删除所有博客的位放在表单的提交处理程序中。这种方法最终让您有机会检查他们是否有任何博客。 ]
如果这是你的设计,那个发出回调的表单可以检查在该回调中设置的delete = myBlogs变量。
或者如果您选择将此表单放在“user /%/ delete-my-blogs”这样的网址上,您可以将该表单作为用户个人资料页面上的标签。 (注意单一用户。你还需要改变 'type'=> MENU_CALLBACK为'type'=> MENU_NORMAL_ITEM, 把它变成一个标签。
%是他们的UID的占位符,它将通过传递给回调 'page arguments'=>阵列(1),
我还建议将函数名称delete_all_blogs更改为blog_additions_delete_all_blogs(),这样就不会与模块外的某些命名空间发生冲突。指示这是“私有”功能的一种方法是使用下划线继续名称。
function _blog_additions_delete_all_blogs(){...
了解如何构建表单/ submit-handler最好在这样的页面上完成: http://drupal.org/node/751826