3

我的主题中有以下内容:

$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,
); 

它很好用,因为它:

  1. 创建一个 url /user/USER_ID/sms-services
  2. 在 /user 页面上创建一个选项卡

但是,我想摆脱 USER ID 部分。即链接必须作为:

/user/sms-services

并且 /user/USER_ID/sms-services 必须重定向到 /user/sms-services

并且 /user/USER_ID 必须重定向到 /user

是否有捷径可寻?

更新

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

/user/me/some-action

/users/393/some-action

当我真正想要的是:

/user/some-action

有人有什么想法吗?

4

1 回答 1

1

也许你可以做一些这样的事情。检查输入 user/sms-services 的用户是否已使用 user_is_logged_in 登录,如果为真,则使用全局 $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()

非常重要:

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

参见 drupal.org 的 hook_menu

于 2015-01-12T09:30:36.427 回答