Drupal - 将'user /%/ edit/uprofile'设置为'user /%/ edit'上的默认选项卡

Tox*_*xid 2 php drupal menu

我正在使用内容配置文件模块.当用户在他们的查看个人资料页面上并按下编辑时,他们希望显示个人资料编辑页面,而不是现在的帐户设置.内容配置文件编辑页面的路径是"user /%/ edit/uprofile".有谁知道如何将'user /%/ edit/uprofile'设置为'user /%/ edit'的默认选项卡?

小智 6

编辑2(内容简介)

此示例适用于"内容配置文件"选项卡.只需更改$type为配置文件的内容类型的简称.这也展示了如何清理代码以供实际使用(我以前的例子非常非常详细):

function mymodule_menu_alter(&$items) {
  // Specify the content profile type you'd like to work with
  $type = 'profile';

  // Make sure the user has a Content Profile to edit
  if (!empty($items['user/%user_category/edit/' . $type])) {
    // Pull out the menu items we want to modify.
    $account  = &$items['user/%user_category/edit/account'];
    $edit     = &$items['user/%user_category/edit'];
    $profile  = &$items['user/%user_category/edit/' . $type];

    // Specify the Edit Account page as just a regular tab. 
    // You do not need to change this block: this will always be the same as long 
    // as you don't want Edit account to be the default tab.
    $account = array(
      'type' => MENU_LOCAL_TASK,
      'page callback' => $edit['page callback'],
      'page arguments' => $edit['page arguments'],
      'access callback' => $edit['access callback'],
      'access arguments' => $edit['access arguments'],
      'module' => $edit['module'],
      'file' => $edit['file'],
    ) + $account;

    // Change the default action to take when hitting user/<UID>/edit to
    // the content profile
    $edit = array(
      'page callback' => $profile['page callback'],
      'page arguments' => $profile['page arguments'],
      'access callback' => $profile['access callback'],
      'access arguments' => $profile['access arguments'],
      'file' => $profile['file'],
      'file path' => $profile['file path'],
    ) + $edit;

    // Specify the profile page as the default tab and remove settings
    // already set above
    $profile['type'] = MENU_DEFAULT_LOCAL_TASK;
    unset($profile['page callback'], 
      $profile['page arguments'], 
      $profile['access callback'], 
      $profile['access arguments'], 
      $profile['file'], 
      $profile['file path']);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑1(对于Core的Profile模块)

我没有意识到您想要更改" 编辑 "下的默认选项卡.这与我下面描述的一般原理相同,但稍作修改.此示例将使" 个人"选项卡(at user/<UID>/edit/Personal)为默认值而不是"帐户"选项卡:

function mymodule_menu_alter(&$items) {
  // Specify the Edit Account page as just a regular tab. 
  // You do not need to change this block: this will always be the same as long 
  // as you don't want Edit account to be the default tab.
  $items['user/%user_category/edit/account']['type'] = MENU_LOCAL_TASK;
  $items['user/%user_category/edit/account']['page callback'] = $items['user/%user_category/edit']['page callback'];
  $items['user/%user_category/edit/account']['page arguments'] = $items['user/%user_category/edit']['page arguments'];
  $items['user/%user_category/edit/account']['access callback'] = $items['user/%user_category/edit']['access callback'];
  $items['user/%user_category/edit/account']['access arguments'] = $items['user/%user_category/edit']['access arguments'];
  $items['user/%user_category/edit/account']['module'] = $items['user/%user_category/edit']['module'];
  $items['user/%user_category/edit/account']['file'] = $items['user/%user_category/edit']['file'];

  // Change default action to take when hitting user/<UID>/edit to
  // the settings of the page you want to use.
  // -- Custom settings start here --
  $items['user/%user_category/edit']['page callback'] = $items['user/%user_category/edit/Personal']['page callback'];
  $items['user/%user_category/edit']['page arguments'] = $items['user/%user_category/edit/Personal']['page arguments'];
  $items['user/%user_category/edit']['access callback'] = $items['user/%user_category/edit/Personal']['access callback'];
  $items['user/%user_category/edit']['access arguments'] = $items['user/%user_category/edit/Personal']['access arguments'];
  $items['user/%user_category/edit']['module'] = $items['user/%user_category/edit/Personal']['module'];
  $items['user/%user_category/edit']['file'] = $items['user/%user_category/edit/Personal']['file'];

  // When loading a profile tab, user_edit needs two parameters. The second parameter is the name of the profile
  // (i.e. Personal from user/<UID>/edit/Personal).
  $items['user/%user_category/edit']['page arguments'] = array(1, 'Personal');

  // Specify the Personal page as the default tab and remove settings
  // already set above */
  $items['user/%user_category/edit/Personal']['type'] = MENU_DEFAULT_LOCAL_TASK;
  unset($items['user/%user_category/edit/Personal']['page callback']);
  unset($items['user/%user_category/edit/Personal']['page arguments']);
  unset($items['user/%user_category/edit/Personal']['access callback']);
  unset($items['user/%user_category/edit/Personal']['access arguments']);
  unset($items['user/%user_category/edit/Personal']['module']);
  unset($items['user/%user_category/edit/Personal']['file']);
}
Run Code Online (Sandbox Code Playgroud)

概述和概念

您可以使用hook_menu_alter并更改特定选项卡的类型.

更改默认选项卡有点令人痛苦.基本上,默认选项卡会继承页面的所有属性,而不会选择任何选项卡.这允许用户转到user/UID并获取视图页面而无需直接进入user/UID/view.

为了更清楚地了解这一点,请查看user_menu()钩子实现.请注意它$items['user/%user/view']是如何相当空的,并$items['user/%user_uid_optional']包含您希望看到的所有设置$items['user/%user/view'].

因此,您将首先设置视图选项卡以充当常规选项卡:要执行此操作,您将必须复制附加到user/UID菜单项的所有设置并将它们放入user/UID/view菜单项中.

完成此操作后,您将user/UID使用要成为默认选项卡的选项卡的设置替换设置.

最后,您将取消设置默认选项卡的所有菜单项,因为它将继承其设置user/UID.

查看此代码,使" 编辑"选项卡成为默认值:

function mymodule_menu_alter(&$items) {
  // Specify the View page as just a regular tab. 
  // You do not need to change this block: this will always be the same as long 
  // as you don't want View to be the default tab.
  $items['user/%user/view']['type'] = MENU_LOCAL_TASK;
  $items['user/%user/view']['page callback'] = $items['user/%user_uid_optional']['page callback'];
  $items['user/%user/view']['page arguments'] = $items['user/%user_uid_optional']['page arguments'];
  $items['user/%user/view']['access callback'] = $items['user/%user_uid_optional']['access callback'];
  $items['user/%user/view']['access arguments'] = $items['user/%user_uid_optional']['access arguments'];
  $items['user/%user/view']['file'] = $items['user/%user_uid_optional']['file'];

  // Normal tabs don't have a weight
  unset($items['user/%user/view']['weight']);

  // Change default action to take when hitting user/<UID> to
  // the settings of the page you want to use.
  // -- Custom settings start here --
  $items['user/%user_uid_optional']['page callback'] = $items['user/%user_category/edit']['page callback'];
  $items['user/%user_uid_optional']['page arguments'] = $items['user/%user_category/edit']['page arguments'];
  $items['user/%user_uid_optional']['access callback'] = $items['user/%user_category/edit']['access callback'];
  $items['user/%user_uid_optional']['access arguments'] = $items['user/%user_category/edit']['access arguments'];
  $items['user/%user_uid_optional']['file'] = $items['user/%user_category/edit']['file'];

  // Specify the Edit page as the default tab and remove settings
  // already set above
  $items['user/%user_category/edit']['type'] = MENU_DEFAULT_LOCAL_TASK;
  $items['user/%user_category/edit']['weight'] = -10;
  unset($items['user/%user_category/edit']['page callback']);
  unset($items['user/%user_category/edit']['page arguments']);
  unset($items['user/%user_category/edit']['access callback']);
  unset($items['user/%user_category/edit']['access arguments']);
  unset($items['user/%user_category/edit']['file']);
}
Run Code Online (Sandbox Code Playgroud)

将功能的第二部分替换为菜单项的设置,您应该处于良好状态.当然,请记住在进行任何菜单更改后清除缓存以使其生效.