特定のページで読み込まれるテンプレートを変えるには?

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

特定のページ(例えば http://*******.jp/node/18)で
読み込まれるテンプレートを変えるには
どうしたら良いのでしょうか?

最初にpage.tpl.phpが読み込まれていることを確認するために
page.tpl.phpの最後に
「これはpage.tpl.phpが表示されています」
と書き込んでサイトを見てみると
サイトの一番下に上記の文が見えました。

次にpage.tpl.phpをコピーして
page-node-18.tpl.phpに名前を変更し、最後に
「これはpage-node-18.tpl.phpが表示されています」
と書き込んでアップロードして
http://*****.jp/node/18
を見てみると、まだ
「これはpage.tpl.phpが表示されています」
という文が表示されていました。

いろんなところで調べたので
テンプレートの名前の付け方は間違っていないと思うのですが
他になにかやることがあるのでしょうか?

Comments

kenppx's picture

はじめまして、bzj00220さん。drupal修行中のkenppxと申します。よろしくお願いします。
私自身の勉強の意味も込めまして、表にまとめてみました。
私は頭が残念なので、すぐに忘れてしまうので…。表にまとめて、PCの前に貼ってます。
drupal7でのtemplateの命名規則は以下の様になります。
drupal6とはちょっと違いますので注意してくださいね。

①→④の順に次第に弱くなってきます。
同時に同じオーバーライドが共存する場合には
①が優先されて、④に近づく程優先順位は弱くなります。

①1番目と2番目のargumentが一致した際に適応
②%がワイルドカードとして働きます。最初のargumentが一致して、2番目が数字として存在する際に適応
③最初のaregumentが一致した際に適応
④特別なテンプレートが無い場合全てに適応

http://*****.jp/node/1の場合
① page--node--1.tpl.php
② page--node--%.tpl.php
③ page--node.tpl.php
④ page.tpl.php

http://*****.jp/user/1の場合
① page--user--1.tpl.php
② page--user--%.tpl.php
③ page--user.tpl.php
④ page.tpl.php

http://*****.jp/whatever/iwantの場合

① page--whatever--iwant.tpl.php
③ page--whatever.tpl.php
④ page.tpl.php

http://*****.jp/whatever/1の場合
① page--whatever--1.tpl.php
② page--whatever--%.tpl.php
③ page--whatever.tpl.php
④ page.tpl.php

Good Job!

qchan's picture

kenppxさん、素晴らしい!
わかりやすくて役に立ちます。ありがとうございます。
Wikiにでもまとめたいですね。

>> bzj00220さん

kenppxさんが書かれているサンプルの説明で、argumentとあるのはDrupalに受け渡すURLのパーツのことです。

http://*****.jp/ がDrupalのトップページだとすると、

http://*****.jp/node/1 
を表示した場合、"node" が一つ目のargument, "1"が2つ目のargumentという意味です。

テンプレートファイルを置いたあとにはキャッシュのクリアをする必要があるので注意して下さい。

D7の場合だと
admin/config/development/performance > [すべてのキャッシュをクリアー]をクリック

または、admin/modules へアクセスして下さい。

Fireworksでまとめて表したのですが…

kenppx's picture

画像のアップロードはこの掲示板できますか?やり方がわからないのですが…。

Fireworksでまとめて表したのですが…

kenppx's picture

画像のアップロードはこの掲示板できますか?やり方がわからないのですが…。

qchan's picture

確かに、drupal.org内のページには画像のInsertが出来るようですが、
g.d.oはHTMLエディタを付けてないですね。

アイデアとして、WikiやDiscussionのNode Edit時には添付ファイル
のアップロードが出来るので一旦画像をアップして画像のURLが生成されてから  <img>
タグで呼び出すというトリックを試してみてもらえますか?

外部のサーバーにアップして呼び出しでも問題無いですが、ずっと置いておかないと
リンク切れするのであまり良くないですよね。

やっぱりダメです。

bzj00220's picture

kenppxさん。返信ありがとうございました。

page--node--18.tpl.phpに名前を変更し、
アップロードして見たのですが
http://*****.jp/node/18
を見てみると、まだ
「これはpage.tpl.phpが表示されています」
という文が表示されていました。

どうしても
page--node--18.tpl.php
が読み込まれません。

アップロードしている場所も
sites/all/themes/テーマのフォルダ/
なので間違いはないと思うのです。

キャッシュはクリアしてみましたか?

kenppx's picture

環境設定でキャッシュのクリアをしてもだめですか?
それと、関係あるかわかりませんがブラウザのキャッシュなども削除してみてはいかがでしょうか?

page--node--18.tpl.php
    ↑
ちなみに上記の様に、--と二本横棒入ってますか?

キャッシュのクリアで読み込めました

bzj00220's picture

kenppxさん、ありがとうございました。
キャッシュのクリアをすることで
読み込めるようになりました。
ありがとうございました。

余談ですが…

kenppx's picture

tpl.phpファイルをオーバーライドして、目的のサイトを構築していくのが、もちろん
王道だと思いますがpanelsというモジュールを使ってブロックリージョンを完全に無効化して
新たに領域を区切りなおしてレイアウトを再構築していくという方法もあります。
似たようなモジュールにdisplay suiteというものもあります。

views panels display suiteを駆使してサイトを作るのも一つの作戦かもしれないと思います。
私はviewsとpanelsをモリモリ使って作っています。
ただ、私自身この構築の方法が正しいのかは良くわかりません。
皆さん、どうされていますか?

今回の場合は・・

bzj00220's picture

書かれているモジュールはviews以外使ったことはありませんので
なんとも言えません。
今回の場合は単純にヘッダとフッタを消したいだけだったので
テンプレートを変更するようにしました。
ただ、将来的なことを考えるとテンプレートなどをいじくってしまうより
モジュールで何とかするほうがいいかもしれませんね。

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

Group organizers

Group categories

Group notifications

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

Hot content this week