Как добавить пункт меню из моего пользовательского Drupal 7-модуля - PullRequest
2 голосов
/ 22 февраля 2012

с помощью моего пользовательского модуля drupal я пытаюсь вставить добавить пункт меню в меню, используя hook_menu().Он должен отображать имя пользователя, связанное с профилем пользователя.(Моя задача может быть похожа на Добавить пункт меню / ссылку в меню Drupal (программно?) .)

[Edit:] Я пытался решить задачу с помощью следующего, но это могломожет быть, это неправильный способ сделать это ..

function mymodule_view_user_page()
{  
  global $user;
  if ($user->uid != 0) {
    /*$items = array(
      'link_path'   => drupal_get_normal_path('user'),
      'link_title'  => 'Account',
      'menu_name'   => 'main-menu',
      'weight'      => 8,
    );*/

    $items['user'] = array(
      'title'           => 'Page name',
      'description'     => t('Account'),
      'menu_name'       => 'main-menu',
      'weight'          => 8,
      'access callback' => TRUE,
      'page callback'   => 'mymodule_view_user_page',
      'access arguments' => array('view own profile'), // permission
      'type' => MENU_NORMAL_ITEM,

    );
    return $items;
  }
}

function mymodule_view_user_page_view_user_page()
{
  drupal_goto('user');
}

С кодом выше ничего не появляется, но также и нет ошибок ..

Я, вероятно, не хочуиспользуйте page callback, так как эта страница уже существует должным образом, но я не уверен насчет ее установки.

Страница документации hook_menu() 1015 * hook_menu действительно обширна, но, похоже, яне понимая, что это правильно и начинает терять волосы над ним ..

Спасибо за подсказки!PP

1 Ответ

4 голосов
/ 22 февраля 2012

Хуки Drupal основаны на соглашении об именах, если хук называется hook_menu(), а ваш модуль называется mymodule, то функция, которую вам нужно реализовать, называется mymodule_menu(). Код будет выглядеть так:

function mymodule_menu() {
  $items['user'] = array(
    'title'           => 'Page name',
    'description'     => t('Account'),
    'menu_name'       => 'main-menu',
    'weight'          => 8,
    'access callback' => TRUE,
    'page callback'   => 'drupal_goto',
    'page arguments' => array('user'),
    'access arguments' => array('view own profile'), // permission
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

Однако путь user уже объявлен в системе, поэтому то, что вы делаете, создаст все виды проблем. Вместо этого вы хотите использовать hook_menu_alter() и изменить menu_name для уже существующего пути:

function mymodule_menu_alter(&$items) {
  $items['user']['menu_name'] = 'main-menu';
}

Делая это таким образом, вам не нужно будет предоставлять свой собственный обратный вызов страницы, так как стандартный путь user просто доставит обычную страницу. Разница лишь в том, что после очистки кешей Drupal ссылка на аккаунт должна появиться в главном меню.

...