Drupal 6 hook_menu со строкой запроса из l () - PullRequest
0 голосов
/ 13 декабря 2011

[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. я не знаю, как использовать его универсальный, чтобы он работал.

1 Ответ

3 голосов
/ 13 декабря 2011

Вы определенно не хотите:

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

Вместо этого вам, вероятно, нужен обратный вызов, который генерирует форму подтверждения.[... выдается текст "Вы уверены, что хотите удалить все блоги?"а затем поместите бит, который фактически удаляет все блоги, в обработчик отправки формы.Этот подход в конечном итоге дает вам возможность проверить, есть ли у них блоги.]

Эта обратная связь, генерирующая форму, может проверять, установлена ​​ли переменная delete = myBlogs внутри этой обратной связи, если это был ваш дизайн.

ИЛИ Если вы решили поместить эту форму по URL-адресу, подобному 'user/% / delete-my-blogs 'вы можете сделать это в виде вкладки на странице профиля пользователя.(Обратите внимание, для отдельного пользователя. Вам также нужно изменить 'type' => MENU_CALLBACK на 'type' => MENU_NORMAL_ITEM, чтобы сделать его вкладкой.

% является заполнителем для их UID, который будет переданк обратному вызову через «аргументы страницы» => array (1),

Я бы также рекомендовал изменить имя функции delete_all_blogs на blog_additions_delete_all_blogs (), чтобы вы не сталкивались с некоторым пространством имен вне вашего модуля.указывать, что это «частная» функция, значит начинать с имени с подчеркиванием.

function _blog_additions_delete_all_blogs () {...

Изучение того, как создать форму / submit-handlerЛучше всего делать на такой странице: http://drupal.org/node/751826

...