0

[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

我的钩子似乎不起作用。url 中使用的 % 可能有错误。我不知道如何通用地使用它才能正常工作。

4

1 回答 1

3

你绝对不想要:

$items['users/%?delete=myBlogs']

相反,您可能需要一个生成确认表单的回调。[ ...发出文本“您确定要删除所有博客吗?” 然后将实际删除所有博客的位放入表单的提交处理程序中。这种方法最终为您提供了一个检查他们是否有任何博客的地方。]

如果那是您的设计,那么该表单发出回调可以检查在该回调中设置的 delete=myBlogs 变量。

或者,如果您选择将此表单放在诸如“user/%/delete-my-blogs”之类的 URL 中,则可以将该表单设置为用户个人资料页面上的选项卡。(注意单数用户。您还需要将 'type'=>MENU_CALLBACK 更改为 'type' => MENU_NORMAL_ITEM,使其成为选项卡。

% 是他们的 UID 的占位符,它将通过 'page arguments' => array(1) 传递给回调,

我还建议将函数名称 delete_all_blogs 更改为 blog_additions_delete_all_blogs() 这样您就不会与模块外部的某些命名空间发生冲突。表明这是一个“私有”函数的一种方法是在名称后面加上下划线。

函数 _blog_additions_delete_all_blogs(){ ...

学习如何构建表单/提交处理程序最好在这样的页面上完成:http: //drupal.org/node/751826

于 2011-12-13T16:15:48.083 回答