Drupal 7 如何避免用户路径中出现Drupal 7用户ID?

Drupal 7 如何避免用户路径中出现Drupal 7用户ID?,drupal-7,hook-menu,Drupal 7,Hook Menu,我的主题如下: $items['user/%user/sms-services'] = array( 'title' => t('SMS Services'), 'page callback' => 'sms_user_page', 'page arguments' => array(1), 'access callback' => 'user_is_logged_in', 'type' => MENU_LOCAL_TASK,

我的主题如下:

$items['user/%user/sms-services'] = array(
    'title' => t('SMS Services'),
    'page callback' => 'sms_user_page',
    'page arguments' => array(1),
    'access callback' => 'user_is_logged_in',
    'type' => MENU_LOCAL_TASK,
); 
它非常有效,因为它:

  • 创建url/user/user\u ID/sms服务
  • 在/user页上创建选项卡
  • 但是,我想去掉用户ID部分。即,链接必须按照以下方式工作:

    /user/sms-services
    
    和/user/user\u ID/sms服务必须重定向到/user/sms服务

    和/user/user\u ID必须重定向到/user

    有没有一个简单的方法可以做到这一点

    更新

    我使用“我的别名”模块完成了大部分工作,但它仍然不是一个非常优雅的解决方案,因为现在我只能使用两个URL:

    /user/me/some-action
    

    当我真正想要的是:

    /user/some-action
    

    有人有什么想法吗?

    也许你可以这样做。检查输入用户/sms服务的用户是否通过使用用户登录登录,如果为真,请使用全局$user获取更多信息。 也许是这样的

    $items['user/sms-services'] = array(
        'title' => 'SMS Services',
        'page callback' => 'sms_user_page',
        'access callback' => 'user_is_logged_in',
        'type' => MENU_LOCAL_TASK,
    ); 
    
    function sms_user_page(){
        if(user_is_logged_in){//Just realize, with 'access callback' => 'user_is_logged_in' in the menu item array this if is unnecesary
          global $user;
          $user->uid;
    
          //Do stuff
        }
    }
    
    还可以从旧的drupal_goto()中创建一个新的drupal_goto()(带有用户通配符的菜单项)

    非常重要:

    不要在菜单项中使用t()函数。通过defualt,drupal将标题字符串传递到函数t()。您可以通过在菜单项数组中设置新的“标题回调”来更改该行为


    请参见drupal.org上的hook_菜单

    事实上,全局用户可以在任何地方恢复,您可以避免通过URL传递它。如果我是你,我会试试吉安尼的解决方案。
    $items['user/sms-services'] = array(
        'title' => 'SMS Services',
        'page callback' => 'sms_user_page',
        'access callback' => 'user_is_logged_in',
        'type' => MENU_LOCAL_TASK,
    ); 
    
    function sms_user_page(){
        if(user_is_logged_in){//Just realize, with 'access callback' => 'user_is_logged_in' in the menu item array this if is unnecesary
          global $user;
          $user->uid;
    
          //Do stuff
        }
    }