如何将Drupal的user / foo / edit更改为user / foo / settings?

时间:2011-07-15 20:21:44

标签: drupal

对于我正在做的Drupal 6网站,“用户编辑”部分被称为“设置”而不是“编辑”似乎更合适。我想进行此更改,直到URL为example.com/user/foo/settings。我一直在使用_menu和_menu_alter处理程序之类的东西,但还没有找到一个干净的方法来做到这一点。有吗?有任何建议(除了“不要做”)?谢谢!

1 个答案:

答案 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 *),因为如果将它们全部保留为在本地任务中,您将在用户配置文件,管理菜单等中看到两个“编辑”选项卡

清除缓存并祝你好运!