2

私のカスタム drupal-module を使用して、メニュー項目をメニューに追加しようとしていますhook_menu()。ユーザープロファイルにリンクされたユーザー名が表示されます。(私のタスクは、メニュー項目/リンクを Drupal メニューに追加する (プログラム的に?)に似ている可能性があります。)

[編集:] 私は次のタスクを解決しようとしましたが、それは間違った方法である可能性があります..

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()ドキュメンテーション ページのhook_menuは非常に広範囲ですが、私はそれが正しく理解されておらず、その上に毛が抜け始めているようです..

ヒントをありがとう!PP

4

1 に答える 1

4

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 のキャッシュをクリアすると、アカウントへのリンクがメイン メニューに表示されることです。

于 2012-02-22T19:40:32.917 に答える