テーマにカスタム領域を作成するにはどうすればよいですか?


58

サイト全体に広がる新しいエリアを追加したい。この新しいリージョンをテーマに取り込むプロセスを説明します。可能な場合は、新しいカスタムリージョンを追加するために一般化します。


詳細ブログ:goo.gl/kD3TZu
Suresh Kamrushi

回答:


68

テーマの.infoファイルで領域を定義します。参照:.infoファイルの構造

次に、関連するテンプレートタグをpage.tpl.phpファイルに配置する必要があります。

たとえばsidebar、テーマの.infoファイルで領域を定義した場合<?php print render($page['sidebar']); ?>、page.tpl.phpの関連する場所に以下を追加します。


6
テーマにpage.tpl.phpファイルがない場合は、デフォルトをシステムモジュールからテーマにコピーし、そのコピーを変更できます。
マイキーP

5
Omegaはpage.tpl.phpの部分を必要とせず、.infoでリージョンを宣言し、キャッシュをクリアします。
カピエテリエル

20

もう1つのポイント:必要な地域をお見逃しなく!

regions[content] = Content
regions[help] = Help
regions[page_top] = Page top
regions[page_bottom] = Page bottom

詳細については、http://drupal.org/update/themes/6/7#closureを参照してください

この点を明確にするには:独自のリージョンを定義する場合、必要なものを含め、使用しているすべてのものを定義する必要があります。つまり、追加のリージョンを定義することはできません。定義する場合は、すべてを定義する必要があります。


9

Drupal 7テーマ用の領域の作成は、Drupal 6領域用の領域の作成と同じです。Drupal 7と以前のバージョンの違いは、基本的に次のとおりです。

  • リージョンはmytheme_regions()、Drupal 5で行われたように関数を使用して定義されていませんが、regions[]ディレクティブを使用してmytheme.infoで定義されています。これは、Drupal 6テーマでも行われます。
  • 領域はrender()、変数のコンテンツを出力する代わりに、Drupal関数を使用してレンダリングされます。

デフォルトのDrupal 7リージョンは次のとおりです。

regions[header] = Header
regions[highlighted] = Highlighted
regions[help] = Help
regions[content] = Content
regions[sidebar_first] = Left sidebar
regions[sidebar_second] = Right sidebar
regions[footer] = Footer

Drupal 7のコアテーマには、Drupal 6のミッションステートメント領域と同じ表示を使用する「強調表示」という名前の領域が含まれるようになりました。また、デフォルトで$helpDrupal 6が使用する変数と同じコンテンツを持つ「help」という名前の領域も含まれます。


4

テーマ領域は、.infoファイルあなたのテーマで定義されている-を参照してドキュメントを。線を追加regions[corner] = Cornerして、コーナー領域を取得します。

次に、page.tpl.phpファイルを編集して<php print render($corner); ?>、リージョンを表示する場所を追加する必要があります。テーマにpage.tpl.phpがない場合は、ベーステーマまたはシステムモジュールからコピーします。

一般的な落とし穴:

  • theme.infoファイルに領域が宣言されていない場合、Drupalのデフォルト領域が使用されていました。追加する場合は、デフォルトの領域を再宣言する必要があります。もちろん、任意の地域を削除できますが、必要な地域をサポートしてください。もう一度ドキュメントを参照してください。

  • .infoファイルへの変更またはテーマへの新しいファイルの追加(page.tpl.phpなど)は、キャッシュをクリアした後にのみ通知されます。

  • 非常に人気のあるベーステーマであるOmegaでは、page.tpl.phpを変更する必要はなく、.infoファイルだけを変更する必要があります。ただし、UIのテーマ設定にアクセスして、リージョンをゾーンに割り当てる必要があります。


これは、一般的な落とし穴のある回答のまとめです。
カピエテリエル

あるregions[content] = ContentD7で唯一必要な領域は? drupal.org/node/171205#regionsはこれを暗示するようだが、その後drupal.org/node/171224必要な領域があることを言ってcontenthelppage_topおよびpage_bottom
ジム・ギャリソン

Drupalがいずれかの地域をチェックするかどうかはわかりませんが、content非常に重要です。help(ヘルプメッセージを出力するために)コアによってサポートされ、page_bottomおそらく下部のjsが印刷される場所でありpage_top、コアツールバーなどのnavbarに使用されるようです。
カピエテリエル14

2

以下の手順に従って、テーマにカスタムリージョンを作成します。

  1. theme.infoファイルに移動して、この行を追加します。

    regions[machine_name_of_your_region] = Name of your region
  2. ノードテンプレートでリージョンブロックを呼び出すこともできますが、通常はテーマのページテンプレートにリージョンを追加します。これは通常page.tpl.phpですが、異なるページのカスタムテンプレートファイルがある場合は、それらも編集します。新しい領域は、新しい領域を追加するテンプレートを中心に構築されたページにのみ表示されます。新しい領域を表示したい場所に貼り付けます。

    <?php if ($page['machine_name_of_your_region']): ?>
      <div id="sidebar-first" class="column sidebar"><div class="section">
      <?php print render($page['machine_name_of_your_region']); ?>
      </div></div> <!-- /.section, /#sidebar-first -->
     <?php endif; ?>
  3. 構成-パフォーマンス-すべてのキャッシュをクリア


0

テーマで新しい領域を作成する

2つのファイルで定義する必要があります。

  • Theme.info
  • Page.tpl.php

Theme.info

;;;;;;;;;;;;;;;;;;;;;
;; Regions
;;;;;;;;;;;;;;;;;;;;;

regions[navigation]      = 'Navigation'
regions[header]          = 'Top Bar'
regions[highlighted]     = 'Highlighted'
regions[new_region_name] = 'Region Name' ;; Add New Region

Page.tpl.php

この領域をレンダリングします

  <?php if ($page['new_region']): ?>
      <div class="new_region_class">
        <?php print render($page['new_region']); ?>
     </div>
  <?php endif; ?>

すべてのキャッシュをクリアします。これで、テーマに新しいリージョンができました。ブロック構成ページで確認できます。

詳細については、http://drupal.org/node/171205をご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.