このブログの個々のエントリーの最後には必ず
Posted on yyyy-mm-dd by 投稿者名 |
カテゴリ名 | 新しいコメントの追加 | パーマリンク | 印刷用ページ | 人気blogランキング | はてブに追加 | はてブ数
という書式のフッターが付くようにしている。Movable Type のデフォルトのテンプレートの形式に近いものだ(はてブとかランキングとか枝葉はついていますが)。これと同じものを Drupal で実現するにはどうしたらいいのだろう?ヒントはテーマにありそうだ。具体的には、
_phptemplate_variables の中でこのフッターを1行を表す変数(例えば $node_footer で、$node_footer の中には HTML 文が入っている)を定義し、
node.tpl.php で使用する。
ここで、リンクの作成方法が Drupal 独特のものである。Drupal 流のスマートなリンクの記述の仕方は、
array() を使うというものである。
Drupal では各種の定義に関するものはほとんど array()、つまりハッシュ変数で定義するようになっている。この array() がネスト構造になるために、それが Drupal のとっつきにくさ(私も未だ慣れない)でもあり、今までにないプログラミングパラダイムを可能にしている。PHP の言語構造と合ってはいるが、ここまで徹底してなんでもかんでも array() を使うと、Drupal とは
PHP の文法を借りた Drupal というスクリプト言語と考えた方がいいかもしれない。つまり CMS 用の記述言語として Drupal が登場してきたのである。
さて、次に紹介するコード(実際にこのブログのフッタとして template.php に書いたもの)では、
- template.php の中の _phptemplate_variables で $node_footer を定義するために、
- switch 文を使って $hook の内容を調べて $hook == 'node' (つまり case 'node': )であれば、
- $node_footer = array(...) を定義する。array(...) の中には、各種のリンク要素が入る。
- そのリンク要素はどのように記述するかというとやはり array(...) であり、その書式は
フッタの HTML = array(リンクの名前=>array('href'=>リンク, 'title'=>タイトル))
となっている。
- フッタの HTML = array(...) の中は、
リンクの名前=>array('href'=>リンク, 'title'=>タイトル),
リンクの名前=>array('href'=>リンク, 'title'=>タイトル),
リンクの名前=>array('href'=>リンク, 'title'=>タイトル),
...
と、繰り返し書くと個々の array(...) で定義したリンクを連結してくれる。
- 最後に、これが大事なのだが、上で定義したフッタの HTML を phptemplate_links に引数として渡す。phptemplate_links は、Drupal の theme_links 関数を Drupal のテーマの中 (template.php) からオーバーライドするものである。
以下がコード全体。
<?php
function _phptemplate_variables($hook, $vars = array()) {
global $base_url;
switch ($hook) {
case 'node':
$node_url = $base_url . $vars['node_url'];
$node_title = $vars['title'];
$vars['permalink'] = "» 「<a href=\"$node_url\" title=\"$node_title\">$node_title" . '」の 続きを読む</a>';
// ノードのフッタ
$node_footer =
array(
'permalink'=>array(
'href' =>$node_url,
'title'=>'| パーマリンク'
),
'printer_friendly'=>array(
'href' =>$node_url . '?print=y',
'title'=>'| 印刷用ページ'
),
'blogranking'=>array(
'href' =>'https://blog.with2.net/link.php?351190',
'title'=>'| <img src="' . $base_url . '/' . file_directory_path() . '/images/blogranking_blue.gif"'
. ' title="ランキングへの協力お願いいたします。"'
. ' alt="人気blogランキング"'
. ' width="80"'
. ' height="15"'
. ' border="no"'
. ' vertical-align="middle">'
),
'hatena_append'=>array(
'href' =>'https://b.hatena.ne.jp/append?' . $node_url,
'title'=>'| <img src="' . $base_url . '/' . file_directory_path() . '/images/hatena_append.gif"'
. ' title="はてなブックマークに追加"'
. ' alt="はてなブックマークに追加"'
. ' width="16"'
. ' height="12"'
. ' border="no"'
. ' vertical-align="middle">'
),
'hatena'=>array(
'href' =>'https://b.hatena.ne.jp/entry/' . $node_url,
'title'=>'| <img src="https://b.hatena.ne.jp/entry/image/large/'
. $node_url . '"'
. ' border="no">',
'attributes'=>array('title'=>$node_title)
),
);
}
$vars['node_footer'] = phptemplate_links($node_footer);
break;
return $vars;
}
?>
トラックバック URL:
https://perltips.twinkle.cc/trackback/273