Drupal - установите 'user /% / edit / uprofile' на вкладку по умолчанию для 'user /% / edit' - PullRequest
2 голосов
/ 04 августа 2010

Я использую модуль профиля контента. Когда пользователь находится на странице своего профиля просмотра и нажимает кнопку Изменить, он ожидает, что страница редактирования профиля будет отображаться, а не настройки учетной записи, как сейчас. Путь к странице редактирования профиля контента «user /% / edit / uprofile». Кто-нибудь знает, как установить 'user /% / edit / uprofile' на вкладку по умолчанию для 'user /% / edit'?

Ответы [ 4 ]

6 голосов
/ 04 августа 2010

Редактировать 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']);
  }
}

Редактировать 1 (для модуля профиля Core)

Я не осознавал, что вы хотите изменить вкладки по умолчанию в Редактировать .Это тот же общий принцип, который я описал ниже, но с некоторыми незначительными изменениями.В этом примере вместо вкладки учетной записи будет установлена ​​вкладка Личная (на 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']);
}

Обзор и концепция

Вы можете сделатьэто с 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']);
}

Заменить вторую часть функциис настройками для вашего пункта меню, и вы должны быть в хорошей форме.Конечно, не забудьте очистить кеш после внесения любых изменений в меню, чтобы они вступили в силу.

1 голос
/ 14 декабря 2010

На drupal.org есть модуль.Работает с полями профиля.См. Инструменты профиля .

0 голосов
/ 12 сентября 2012

Я искал решение, но не был удовлетворен такой сложностью. Я сделал это так.

function MYTHEME_menu_link(array $variables) {
    global $user;

    if($variables["element"]["#theme"] == "menu_link__user_menu" && $variables["element"]["#original_link"]["router_path"] == "user") {
        $variables["element"]["#href"] = "user/".$user->uid."/edit";
    }

    return theme_menu_link($variables);
}
0 голосов
/ 05 августа 2010

Вот код, который работал для меня с установленным профилем контента и типом контента по умолчанию («профиль»):

function mymodule_menu_alter(&$items) {
  // Save the data from user/%/edit into user/%/edit/account.
  $items['user/%user_category/edit/account'] = $items['user/%user_category/edit'];
  $items['user/%user_category/edit/account']['tab_parent'] = 'user/%/edit';
  $items['user/%user_category/edit/account']['title'] = 'Account';

  // Change the default user/%/edit to user/%/edit/profile.
  $useredit = &$items['user/%user_category/edit'];
  $userprofile = &$items['user/%user_category/edit/profile'];
  $useredit['page callback'] = $userprofile['page callback'];
  $useredit['page arguments'] = $userprofile['page arguments'];
  $useredit['access callback'] = $userprofile['access callback'];
  $useredit['access arguments'] = $userprofile['access arguments'];
  $useredit['file'] = $userprofile['file'];
  $useredit['file path'] = $userprofile['file path'];

  // Make the user/%/edit/profile sub-tab the default and left-most sub-tab.
  $userprofile['type'] = MENU_DEFAULT_LOCAL_TASK;
  $userprofile['weight'] = -10;
}

Измените $userprofile = $items['user/%user_category/edit/profile'], чтобы он соответствовал нужному пути профиля контента (в вашем случаеэто будет $userprofile = $items['user/%user_category/edit/uprofile']

Также убедитесь, что ваш модуль запускается после модуля content_profile (ваш модуль должен иметь «больший» вес, чем -1, то есть вес content_profile.module). Модули имеют вес по умолчанию, равный0 так что с тобой все будет в порядке.

...