1

Drupal 7 モジュールを作成しています。したがって、hook_menu() の実装の一部は次のようになります。

$items['admin/mymodule/a'] = array(
  'title' => 'A',
  'page callback' => 'mymodule_a',
  'access arguments' => array('administer mymodule'),
  'type' => MENU_LOCAL_TASK,
  'weight' => 2,
);
$items['admin/mymodule/a/%id/edit'] = array(
  'title' => 'Edit',
  'page callback' => 'mymodule_edit',
  'access arguments' => array('administer mymodule'),
  'type' => MENU_DEFAULT_LOCAL_TASK,
  'weight' => 1,
);
$items['admin/mymodule/a/%id/details'] = array(
  'title' => 'Details',
  'page callback' => 'mymodule_details',
  'access arguments' => array('administer mymodule'),
  'type' => MENU_LOCAL_TASK,
  'weight' => 2,
);

今私が達成しようとしているのは、「A」というタイトルのページからセカンダリ タブへのリンクを非表示にすることです。これらのセカンダリ タブ間のリンクはまだあります。つまり、admin/mymodule/aにアクセスすると、セカンダリ タブへのリンクは表示されません。一方、admin/mymodule/a/42/editの場合は、 .../42/edit.../42/detailsページの両方にリンクを追加する必要があります。これは簡単に達成できると思いますが、方法がわかりません...ご提案ありがとうございます!

4

1 に答える 1

0

私自身 drupal は初めてですが、次のフックを使用できると思います。

hook_menu_alter(&$items)  
// http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu_alter/7

最後の 2 ページの「タイプ」を MENU_CALLBACK に変更します (これにより、これらのページのタブが非表示になります)。

編集(返信を読んだ後):

 $items['pages/render-array'] = array(
    'title' => 'Render array',
    'description' => 'Menu system example using a render array.',
    'page callback' => 'pages_render_array',
    'access arguments' => array('access content'),
    'weight' => 2,
    'type' => MENU_LOCAL_TASK,
  );
  $items['pages/render-array/tab1'] = array(
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'title' => 'Tab 1',
  );
  $items['pages/render-array/tab2'] = array(
    'title' => 'Tab 2',
    'description' => 'Demonstrating secondary tabs.',
    'page callback' => 'pages_render_array',
    'access callback' => TRUE,
    'type' => MENU_LOCAL_TASK,
  );

これは 2 つのサブタブを持つページのコードです。「hook_menu_alter」(= ページ「A」のとき) に条件を設定して、他の 2 ページ (またはそのようなもの..?) を変更できると思います。

これでも役に立たない場合は本当に申し訳ありません。ここでブレインストーミングを試みているだけです:D (drupalの最初の週)

于 2012-02-29T18:56:18.290 に答える