web-dev-qa-db-ja.com

メインメニューとセカンダリメニューが単にリージョンではないのはなぜですか?

私は、ブロックを使用してコンテンツをほとんどどこにでも(テーマがリージョンを提供するところに)配置できることに気づきました。

これはかなり簡単になり、理にかなっています。しかし、「マイアカウント」および「ログアウト」リンクがどこから来たかを見つけようとしていました。そしていくつかの検索の結果、それらがメニュー->設定管理ページで設定されていることがわかりました。

セカンダリリンクのソースの誤解を招くヘルプテキストに関する論争を読んだので、セカンダリリンクを表示するこの「特別な」動作は、Drupal 7。

つまり、私の質問は:なぜこれらの「リージョン」が個別に扱われるのですか?

通常のメインメニューとセカンダリメニューの領域がないのはなぜですか?

1
Ray Hulha

したがって、多くの調査の結果、メインメニューとセカンダリメニューの設定が歴史的な理由で存在することがわかりました。 Drupal 5)には適切な機能がありましたが、新しいバージョン(6および7)のリリースにより、モダンテーマが強力なリージョンの概念を優先してそれらを完全に無視するまで、その有用性は低下しています。

含まれているテーマ(他の人が述べたように)には、特別な「リージョン」がありますが、それは誰も削除したくないからです。

元のアイデアは、メインメニューで何を選択するかに応じて、サブメニューリンク(セカンダリメニュー)を簡単に表示する方法を用意することでした。

現代のアプローチでは、ポップアウトサブメニュー(Superfishな​​ど)を使用することで、セカンダリメニュー機能が廃止されました。

実際、機能が壊れており、だれもそれを修正していません。

要約すると、この機能は壊れていて時代遅れです。 Drupal 8。

3
Ray Hulha

ご質問にはお答えできかねます。しかし、 Menu Block モジュールが問題の解決策になる可能性があります。

モジュールはブロック内のメニューをレンダリングできます。また、メインメニューのサブメニューをレンダリングして、別のブロックに配置することもできます。

(子メニューアイテムがあり、親がフロントページである場合、 パッチ メニューブロックモジュールが必要になる場合があります。Drupalは子メニューアイテムが好きではないようですフロントページの。)

1
eye-wonder

セカンダリリンクをプライマリリンクの「ソース」にすると、セカンダリリンクには、現在アクティブなメニューアイテム/ページの子メニューアイテムが自動的に表示されます。

メニューをリージョンとして考えると、テーマリージョンをページコンテンツと間違えている可能性があります。

メインメニューとセカンダリメニューは、テーマ領域内に直接配置されることが多いページコンテンツです。

[管理]> [構造]> [ブロック管理]のブロックラッパーにメニューを配置し、その方法でテーマ領域に追加するのを止めることは何もありません。

それはあなたのサイトのデザインとレイアウトに何が最も適しているかが重要です。

例:メニューをブロックに配置

/**
 * Implements hook_block
 * Provide core menus as regular blocks
 */
function example_menus_block_info(){
  $blocks['example_main_menu'] = array(
    'info' => t('example Main menu'), 
    'cache' => DRUPAL_CACHE_GLOBAL,
  );
  $blocks['primary_tabs'] = array(
    'info' => 'Local tasks: primary',
    'cache' => DRUPAL_CACHE_PER_PAGE
  );
  $blocks['secondary_tabs'] = array(
    'info' => 'Local tasks: secondary',
    'cache' => DRUPAL_CACHE_PER_PAGE
  );
  $blocks['primary_secondary_tabs'] = array(
    'info' => 'Local tasks: primary and secondary',
    'cache' => DRUPAL_CACHE_PER_PAGE
  );
  return $blocks;
}

/**
 * hook_block_view
 */
function example_menus_block_view($delta = ''){
  $block = array();
  $block['subject'] = ''; // default no title
  switch ($delta) {
    // Our own properly wrapped main menu for panels.
    case 'example_main_menu':
      $main_menu = menu_main_menu();
      $options = array(
          'links' => $main_menu,
          'attributes' => array(
            'id' => 'main-menu',
            'class' => array('links', 'inline', 'clearfix'),
          ),
          'heading' => array(
            'text' => t('Main menu'),
            'level' => 'h2',
            'class' => array('element-invisible'),
          ),
        );
      $block['content'] = theme('links__system_main_menu', $options);
    break;
  case 'primary_tabs':
    $block['content'] = array(
      '#primary' => menu_primary_local_tasks(),
      '#theme' => 'menu_local_tasks',
    );
    break;
  case 'secondary_tabs':
    $block['content'] = array(
      '#secondary' => menu_secondary_local_tasks(),
      '#theme' => 'menu_local_tasks',
    );
    break;
  case 'primary_secondary_tabs':
    // default, same as core
    $block['content'] = menu_local_tabs();
    break;
  }
  return $block;
}

キャッシュをクリアすると、メニューを通常のDrupalブロックとして追加できます。

1
David Thomas

リージョンはDrupalテーマによって提供されます。

それらはテーマの.infoファイルで宣言されます。

bartikテーマで作業していることをお勧めします。

セカンダリメニュー(他のメニューと同様)は、ブロックのように、またはプログラムで印刷できます。 $secondary_menu変数は、/themes/bartik/templates/page.tpl.phpファイルの143行目にあります。

セカンダリメニューまたはメインメニューをオフにする場合は、Drupalサイトの/admin/appearance/settings/ページにアクセスし、Main menuまたはSecondary menuをオフにします

通常のメインメニューとセカンダリメニューの領域がないのはなぜですか?

一部のテーマ(Fusionなど)は、ボックスからのメニューに特別な領域を提供します。しかし、いくつかの手順で、好きな場所に独自のリージョンを作成できるため、その必要はありません。

  1. テーマ.infoファイルでリージョンを宣言する
  2. あなたのテーマのpage.tpl.phpファイルであなたの地域を印刷してください
  3. キャッシュをフラッシュする

詳細は テーマガイド領域へのコンテンツの割り当て をご覧ください。

0
milkovsky

特定の地域のメニューが必要な場合は、テーマ設定ページでメインメニューとセカンダリメニューを無効にできます。

Drupalのすべてのメニューには、ブロック構成ページにブロックがあります。

次に、メニューブロックを任意の領域に配置できます。 Drupalがデフォルトでこのように設定されていない理由がわかりません。

また、テーマ情報ファイルで機能として指定しないことで、新しいテーマを作成するときにメニューを無効にできるはずです。

参照 http://drupal.org/node/171205#features

0
julianlab

レイ、私はあなたの質問に対する答えは「なぜロゴが地域ではないのか」と同じだと思います。 ロゴの横にブロックを表示 などの投稿は、これも混乱の原因であることを示しています。

元のDrupalでは、テーマがずっと単純だったと思います。 Drupalの作成者は、コンテンツ領域に加えて、ロゴや2つのメニュー用のスペースなど、Webページのオリジナルのアイデアを実装するのに十分な特別な目的のスペースを提供できたはずです。多分まだ地域がなかったかもしれませんが、誰かがこれらの特別な目的の空間がそこに一般化できることに気づきました。

ほとんどの読者は、プログラマーが何かを実装する方法に精通していて、さまざまな特殊目的の機能を一般化できることに気づくでしょう。 StackExchangeは意見ではなく事実を尋ねるため、Drupalがどのように開発されたかについての資料を検索しましたが、関連するものは何も見つかりませんでした(ただし、コードアーカイブを見ることができると思います)。 DrupalおよびDrupalコミュニティ-SlideShare の進化= that Drupal 4.7.0はすでに最初のDrupalには、「すべて醜い」という数十のテーマしかありませんでした。

ちなみに、私はDevsaranのVentureテーマを実験していますが、それはこれらの異常な非リージョンに依存しているようです。そのため、少なくとも1つの現代的なテーマでまだ使用されています。 メインメニューブロックが無効になっているのに、なぜテーマ(Venture、しかしおそらく他のものも)がメインメニューを表示できるのですか? あなたの質問に答えてください。