メインメニューというメニューがあります。ブロックとして2回投稿したいと思います。1つはヘッダーにメインメニューがあり、もう1つはフッターにメインメニューがあります。しかし、Drupal 7では許可されません。Drupal 7では、ブロックを1回だけ投稿できます...ヘッダーまたはフッターのいずれかで。
別の方法はありますか?そうでない場合は、JavaScriptを使用してメインメニューのhtmlノード全体を複製し、フッターノードに追加します。
Menu Block モジュールがこれを行います。
では、テーマのメインメニューリンク機能とセカンダリメニューリンク機能を使用して、「それよりも深いメニュー項目をどのように表示するのですか?」
それが、このモジュールが行うことです。これは、任意のメニューの任意のレベルで始まるメニューツリーの構成可能なブロックを提供します。もっと!
MultiBlock モジュールがこれを行うことができるようです。
MultiBlockモジュールは、既存のブロックの複数のブロックインスタンスを作成できるようにすることで、この問題を解決します。
Drupal 7のRender APIを使用すると、これを非常に簡単に行うことができます。具体的には hook_page_alter()
を参照してください。RenderAPIはフォームによく似ています。 APIでは、生のHTMLを作成するのではなく、コンテンツを説明する配列としてコンテンツを作成します。ブロックはこれらレンダリング配列を使用して作成されるため、非常に簡単になりますモジュールまたはテーマレイヤーから操作します。詳細については、 Render APIのドキュメント を確認してください。また、いくつかのDrupalconビデオが非常に役立つことがわかりました: http:// www。 archive.org/details/drupalconchi_day3_the_render_api_in_drupal_7 および http://www.archive.org/details/PageRenderDrillDownInDrupal7 は良いものです。
あなたの特定のケースでは、ブロックが「メインメニュー」と呼ばれ、ページの「ヘッダー」領域にあると仮定して、次のようなhook_page_alter()
を実装します...
function mymodule_page_alter(&$page) {
// get the block you're after from the $page array
$menu_block = $page['header']['main-menu'];
// copy the block to another location in the page array
$page['footer']['main-menu'] = $menu_block;
}
このコードは、「メインメニュー」ブロックの定義を取得し、それをフッター領域にコピーします。これにより、Drupalでブロックが2回印刷されます。この特定の例は、上記にリンクされているビデオの少なくとも1つにも示されています。
また、テンプレートのpage.tpl.phpファイルまたは変更したいファイルを使用して、メニューブロックをもう一度印刷することもできます。
<body>
<div class="header">
<?php print render($page['menu']); ?>
</div>
<div class="content">
.....
.....page content and content blocks
.....
</div>
<div class="footer">
<?php print render($page['menu']); ?>
</div>
</body>
これでうまくいくはずです。CSSを使用すると、必要に応じてスタイルを変更できます
.header > .menu{..styles menu header...}
.footer > .menu{..styles menu footer...}
Menu clone を使用すると、メニューのクローンを作成できますが、どこにでも追加できるブロックを作成する前に、必要に応じてメニューを調整できますあなたのサイトで。メニューブロックよりも少し柔軟性があります。