我正在使用内容配置文件模块.当用户在他们的查看个人资料页面上并按下编辑时,他们希望显示个人资料编辑页面,而不是现在的帐户设置.内容配置文件编辑页面的路径是"user /%/ edit/uprofile".有谁知道如何将'user /%/ edit/uprofile'设置为'user /%/ edit'的默认选项卡?
小智 6
此示例适用于"内容配置文件"选项卡.只需更改$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)
我没有意识到您想要更改" 编辑 "下的默认选项卡.这与我下面描述的一般原理相同,但稍作修改.此示例将使" 个人"选项卡(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)
将功能的第二部分替换为菜单项的设置,您应该处于良好状态.当然,请记住在进行任何菜单更改后清除缓存以使其生效.