Drupal6.xのテーマへの領域の追加

Events happening in the community are now at Drupal community events on www.drupal.org.
jun-gdo's picture

Drupal5からDrupal6へ移行作業中です。
ZENテーマを元にカスタムテーマを作っています。
テーマ内の領域(header、footer、sidebar等)を追加したいのですが方法がわかりません。

D5のZENではtemplate.php内の
function THEME_regions()で設定していましたが、
D6のtemplate.php内には見当たりません。
試しに自分でTHEME_regions()を書いて見ましたがダメでした。
どこで設定すればいいですか?

Comments

themes /

aiwata55's picture

themes / [あなたのテーマフォルダ] / [あなたのテーマ名].info です。

この中に
  regions[xxx] = yyy
という部分があります。

xxx の部分が Drupal のシステムが使用する名称で、yyy の部分がブロック設定画面などで表示される名称です。


Aki Iwata
FOREST & trees

RE:[あなたのテーマ名].info

jun-gdo's picture

region[xxx] = yyyを追記したのですが、表示されませんでした。
試しに元からあるもの(left、right、navbar等)をコメントアウトしてみたのですが、元からあるものは表示されたままです。

/admin/settings/performanceでの設定は全て無効にしてあるのですが、
他に原因として考えられることはありますか?

解決時のコード

xbro's picture

具体的に.info ファイルにどういうコードを変更/追加したのか開示してもらえますか。Drupal初心者の私としては上記の会話だけでは、何が行われたのか解らないのでできたらsolution掲示お願いします。

  regions[header?] = yyy
  regions[footer?] = yyy

それぞれ書き込んだのでしょうか?

後、これはD5からD6に移転した時のみ使用される方法でしょうか?

Drupal では、Region

aiwata55's picture

Drupal では、Region の追加をするにあたり、まず .info ファイル内でその Region を宣言してやる必要があります。
それが

regions[xxx] = yyy

の部分です。

Zen theme では、デフォルトの状態で

regions[left]           = left sidebar
regions[right]          = right sidebar
regions[navbar]         = navigation bar
regions[content_top]    = content top
regions[content_bottom] = content bottom
regions[header]         = header
regions[footer]         = footer
regions[closure_region] = closure

というのがすでに宣言されているので、ここに自分で追加したい Region を追加するのです。

これだけでは駄目で、さらに page.tpl.php でその Region を追加してやる必要があります。
たとえば、Content Top だと、Zen の page.tpl.php には

        <?php if ($content_top): ?>
          <div id="content-top" class="region region-content_top">
            <?php print $content_top; ?>
          </div> <!-- /#content-top -->
        <?php endif; ?>

と記述されています。
同様に、新しい Region については、
        <?php if ($xxx): ?>
          <div id="xxx" class="region region-xxx">
            <?php print $xxx; ?>
          </div> <!-- /#xxx -->
        <?php endif; ?>

(xxx のところは、自分が作った Region に置き換えて)
というふうに追加すればいいんです。

最後に、Theme Registry をクリア(admin/settings/performance)してやると、追加した Region を利用できるようになります。


Aki Iwata
FOREST & trees

Re:解決時のコード

jun-gdo's picture

内容が重複してしまいあまり意味がないかもしれませんが、解決時のコードです。

[テーマ名].info の以下の部分に太字の一行を追記しました。

regions[left] = left sidebar
regions[right] = right sidebar
regions[navbar] = navigation bar
regions[content_top] = content top
regions[content_bottom] = content bottom
regions[header] = header
regions[footer] = footer
regions[closure_region] = closure
regions[header_ads] = header ads

サイト上部に広告表示領域が欲しかったので「header_ads」という名前にしましたが、
名前は任意で好きな文字列を使用して下さい。
regions[xxx] = yyy
xxxの部分は半角スペースは使わないで下さい。
yyyの部分は半角スペースを使用しても大丈夫です。

[テーマ名].infoの内容を上記のように修正したらpage.tpl.php内の任意の場所に、

<?php
if ($header_ads):
?>

<?php
print $header_ads;
?>

<?php
endif;
?>

のように書くことで、ブロックを表示させることが出来ます。
idの値やheader_adsの部分は適宜書き換えて下さい。

D5の時のZENテーマではtemplate.php内の
function [テーマ名]_regions()で定義されていました。
D6のZENでは[テーマ名].info内で定義するように変わったようです。

参考になる情報

xbro's picture

参考になる情報皆様ありがとうございます。

スコット

admin/settings/performance

aiwata55's picture

admin/settings/performance でキャッシュデータのクリアは試しましたか?


Aki Iwata
FOREST & trees

キャッシュのクリア

jun-gdo's picture

キャッシュのクリアで解決しました。
ありがとうございました。

キャッシュの設定は全て無効にしていたので気にしていませんでした。
それでもキャッシュされるデータがあるんですね。
次回から気をつけます。

develと云うモジュール

Antoine Lafontaine's picture

develと云うモジュールを追加したら。develブロックに便利なflush(reset?) cacheがあります。
それかdrushモジュールを使ってコマンド操作で出来ます: drush cache clear.

ご参考まで。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: