アイキャッチ画像: デスクの上でパソコンを使用している

こんにちは。社内で構築したGitlab上で送られてくるマージリクエストをコードレビューして、マージボタンを押す仕事ばかりをしている大野です。

カスタマイズしたい部分

今回はDrupalでサイトを構築する上で、最もカスタマイズしたい場所の一つである投稿者情報の表示形式を変更する方法を解説します。社内のデザイナーからも「時間を消したい」とか「投稿者名だけ消したい」などの相談がよく寄せられるので、今回のこの記事を見て自分でやってくれるようになってくれたら御の字ですね!

対象とするユーザー

今回のこの記事は対象は以下のとおりです。テーマの作り方から解説してしまうと膨大な量になってしますので、それはまた別の機会に解説させてください。

  • Drupalのテーマ開発をしたことがある方
  • 既存のテーマを改造して使っている方

node.tpl.phpを探す

投稿者情報はお使いのテーマフォルダ内にある node.tpl.php と言うファイルを編集することで、変更することができます。

使用しているテーマフォルダにnode.tpl.phpと言うファイルが無いか探してみてください。templatesフォルダに入れられているケースが多いです。もし無かった場合は次のセクションを読んでください。

node.tpl.phpが無い場合

一部のテーマやあなたが開発したテーマであればnode.tpl.phpが無いかもしれません。modules/node/node.tpl.phpが元となるファイルですので、あなたが使用しているテーマフォルダ以下の適当な場所へコピーしてください。ちなみになぜ適当な場所と書いたかと言うと、Drupalは再帰的にあなたのテーマフォルダ内にあるnode.tpl.phpを探索してくれるからです。

Drupalのテーマレジストリがテンプレートの在処をキャッシュしてしまっているので、新たにnode.tpl.phpを追加した場合はキャッシュをクリアする必要があります。

node.tpl.phpを編集

node.tpl.phpをあなたの愛用のテキストエディタで開き、93行目辺りを御覧ください。テーマによっては多少場所やコードが違いますが、下記のような記述の箇所があると思います。ここが投稿者情報を表示しているPHPとHTMLのコードです。

<?php if ($display_submitted): ?>
  <div class="submitted">
    <?php print $submitted; ?>
  </div>
<?php endif; ?>

ここで使用されている$submittedと言うPHPの変数に投稿者情報が格納されているので、この部分を他の変数を駆使して書き換えます。

変更後の結果と共に例を示します。

// 日付と時間だけ表示
// 例: 日, 06/01/2014 - 14:27
<?php print format_date($created); ?>

// 書式をカスタマイズして日付と時間だけ表示
// 例: 2014/06/05 (木) 08:54
<?php print format_date($created, 'custom', 'Y/m/d (D) H:i'); ?>

// 投稿者名だけを表示
// 例: 匿名ユーザー
<?php print $name; ?>

投稿者情報でよく使われる変数について簡単に解説します。

  • $submitted: 通常の投稿者情報が代入されています。
  • $created: Unixtime形式で作成日が代入されています。通常は format_date() 関数と組み合わせて使用します。
  • $date: 人が読める形式で日付が代入されています。日付のフォーマットは 環境設定 > 日付と時刻 (admin/config/regional/date-time) から変更することができます。弊社山中の記事にこの日付のカスタマイズ方法が書かれておりますので、よろしければご覧ください。
  • $name: ノードを投稿したユーザー名が代入されています。

node.tpl.phpには予めカスタマイズに便利な変数が多数用意されているので、大抵の表示方法には対応することができるかと思います。

今回ご紹介したnode.tpl.phpについても今後じっくり解説したいと思いますのでご期待ください。