对于我正在做的Drupal 6网站,“用户编辑”部分被称为“设置”而不是“编辑”似乎更合适。我想进行此更改,直到URL为example.com/user/foo/settings。我一直在使用_menu和_menu_alter处理程序之类的东西,但还没有找到一个干净的方法来做到这一点。有吗?有任何建议(除了“不要做”)?谢谢!
答案 0 :(得分:1)
嗯,是的,首先想到的是不要这样做,特别是如果你的意思是消除“... / edit”。您可以想象其他模块(尤其是contrib模块)可能会假设 user /%/ edit 以生成链接和内容。
但如果你因为某些原因必须这样做,那么它必须是这样的:
<?php
/**
* Implementation of hook_menu_alter().
*/
function MYMODULE_menu_alter(&$items) {
$items['user/%user_category/settings'] = $items['user/%user_category/edit'];
$items['user/%user_category/settings']['title'] = 'Settings';
$items['user/%user_category/settings/account'] = $items['user/%user_category/edit/account'];
unset($items['user/%user_category/edit'], $items['user/%user_category/edit/account']);
}
这将基本上消除原始的“/ edit”回调。
一个更好的选择(因为,就像我说的,你将来安装的其他模块/主题/等可能会假设存在“... / edit”URL)将同时拥有两个,新的一个是只是原件的副本:
<?php
function MYMODULE_menu_alter(&$items) {
$items['user/%user_category/settings'] = $items['user/%user_category/edit'];
$items['user/%user_category/settings']['title'] = 'Settings';
$items['user/%user_category/settings/account'] = $items['user/%user_category/edit/account'];
$items['user/%user_category/edit']['type'] = MENU_CALLBACK;
$items['user/%user_category/edit/account']['type'] = MENU_CALLBACK;
}
注意我将原始“... /编辑”项目类型更改为* MENU_CALLBACK *(它们原来是* MENU_LOCAL_TASK *和* MENU_DEFAULT_LOCAL_TASK *),因为如果将它们全部保留为在本地任务中,您将在用户配置文件,管理菜单等中看到两个“编辑”选项卡
清除缓存并祝你好运!