0

【Drupal6】私の前処理機能は

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に変更する必要もあります。

%は、'ページ引数'=> array(1)を介してコールバックに渡されるUIDのプレースホルダーです。

また、モジュール外の名前空間と衝突しないように、関数名delete_all_blogsをblog_additions_delete_all_blogs()に変更することをお勧めします。これが「プライベート」機能であることを示す1つの方法は、名前にアンダースコアを付けて続行することです。

関数_blog_additions_delete_all_blogs(){..。

フォーム/submit-handlerの作成方法について学ぶには、次のようなページを使用するのが最適です。http: //drupal.org/node/751826

于 2011-12-13T16:15:48.083 に答える