Posted by jun-gdo on June 30, 2009 at 2:27am
Drupal5からDrupal6へ移行作業中です。
ZENテーマを元にカスタムテーマを作っています。
テーマ内の領域(header、footer、sidebar等)を追加したいのですが方法がわかりません。
D5のZENではtemplate.php内の
function THEME_regions()で設定していましたが、
D6のtemplate.php内には見当たりません。
試しに自分でTHEME_regions()を書いて見ましたがダメでした。
どこで設定すればいいですか?
Comments
themes /
themes / [あなたのテーマフォルダ] / [あなたのテーマ名].info です。
この中に
regions[xxx] = yyy
という部分があります。
xxx の部分が Drupal のシステムが使用する名称で、yyy の部分がブロック設定画面などで表示される名称です。
Aki Iwata
FOREST & trees
RE:[あなたのテーマ名].info
region[xxx] = yyyを追記したのですが、表示されませんでした。
試しに元からあるもの(left、right、navbar等)をコメントアウトしてみたのですが、元からあるものは表示されたままです。
/admin/settings/performanceでの設定は全て無効にしてあるのですが、
他に原因として考えられることはありますか?
解決時のコード
具体的に.info ファイルにどういうコードを変更/追加したのか開示してもらえますか。Drupal初心者の私としては上記の会話だけでは、何が行われたのか解らないのでできたらsolution掲示お願いします。
regions[header?] = yyy
regions[footer?] = yyy
それぞれ書き込んだのでしょうか?
後、これはD5からD6に移転した時のみ使用される方法でしょうか?
Drupal では、Region
Drupal では、Region の追加をするにあたり、まず .info ファイル内でその Region を宣言してやる必要があります。
それが
regions[xxx] = yyyの部分です。
Zen theme では、デフォルトの状態で
regions[left] = left sidebarregions[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:解決時のコード
内容が重複してしまいあまり意味がないかもしれませんが、解決時のコードです。
[テーマ名].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内の任意の場所に、
<?phpif ($header_ads):
?>
<?phpprint $header_ads;
?>
<?phpendif;
?>
のように書くことで、ブロックを表示させることが出来ます。
idの値やheader_adsの部分は適宜書き換えて下さい。
D5の時のZENテーマではtemplate.php内の
function [テーマ名]_regions()で定義されていました。
D6のZENでは[テーマ名].info内で定義するように変わったようです。
参考になる情報
参考になる情報皆様ありがとうございます。
スコット
admin/settings/performance
admin/settings/performance でキャッシュデータのクリアは試しましたか?
Aki Iwata
FOREST & trees
キャッシュのクリア
キャッシュのクリアで解決しました。
ありがとうございました。
キャッシュの設定は全て無効にしていたので気にしていませんでした。
それでもキャッシュされるデータがあるんですね。
次回から気をつけます。
develと云うモジュール
develと云うモジュールを追加したら。develブロックに便利なflush(reset?) cacheがあります。
それかdrushモジュールを使ってコマンド操作で出来ます: drush cache clear.
ご参考まで。