デザイン(HTML)仕様

 narutoでは独自のHTMLテンプレータを利用してHTMLの動的出力を行っています。 オリジナルのHTMLテンプレートを編集することで、出力されるHTMLを変更することが可能です。 CSSを変更するだけでもデザインを大きく変えることができますが、HTMLを変更することでさらにデザインの自由度は上がります。

 このページではnarutoのHTMLテンプレートがどのようにしてできているかを解説していきます。

基本的なこと

 「HTMLテンプレート」と言っても、殆ど普通のHTMLと変わるところはありません。 ただ、一部に{ }で囲まれた「命令」が組み込まれており、これはほぼPHPと同じ構文で記述されています。


 テンプレートで使用されている命令は「if (〜)」と「foreach (A as B)」の2種類です。 これらは乱暴に言ってしまえば「もし〜が空(0, FALSE, 偽)じゃなければ」と「リストAの中身を順番にBとして使え」という命令です。 基本的にこれらの部分は「さわらぬが吉」だと考えてくれればOKです。もちろん、PHPに詳しい方はゴリゴリ書き換えてもOKだと思いますが……^^;


 他には{$*****}となっているところがあります。この「$*****」の部分が変数です。 この部分は単純にその変数の中身に置き換わります。


 プログラミングを経験したことがない方には少しわかりづらいかもしれませんが……HTMLテンプレートと、実際に表示されるHTMLを見比べてみると、少しその仕組みがわかるのではないでしょうか。

テンプレートで使用可能な変数

$url
BlogのURL
$title
Blogのタイトル に設定した内容
$description
Blogのコメント に設定した内容
$subject
Windowsのタイトル文字列
$entries
表示しようとしている記事データのリスト(配列)。テンプレートでは
{foreach ($entries as $e)}
の様に使われています。
このとき、$eに代入されるデータ(連想配列)は以下の通り。
$e.eid    -- 記事ID
$e.cid    -- カテゴリID
$e.aid    -- 投稿者ID
$e.sstamp  -- 日時
$e.title   -- タイトル
$e.body   -- 本文
$e.trackback -- トラックバック許可された記事かどうか (0 or 1)
$e.comment  -- コメントが許可された記事かどうか (0 or 1)
$e.auther  -- 管理者名
$e.category -- カテゴリ名
$e.count_c  -- この記事へのコメント数
$e.count_t  -- この記事へのトラックバック数
$comment
コメントリスト&フォーム表示フラグ (0 or 1)
$comments
表示しようとしているコメントデータのリスト(配列)。テンプレートでは
{foreach ($comments as $c)}
の様に使われています。
このとき、$cに代入されるデータ(連想配列)は以下の通り。
$c.mid      -- コメントID
$c.eid      -- 記事ID
$c.name     -- 名前
$c.email    -- メールアドレス
$c.url      -- URL
$c.comment  -- 本文
$c.host     -- 投稿者リモートホスト
$c.cstamp   -- 投稿日時
$err
コメント投稿時のエラーメッセージ
$msg
コメント投稿時の通常メッセージ
$def
コメントフォームの初期値。
$def.name    -- 名前(name)
$def.email   -- メールアドレス(e-mail)
$def.url     -- URL
$def.comment -- 本文(comment)
$trackback
トラックバックリスト&フォーム表示フラグ (0 or 1)
$comments
表示しようとしているトラックバックデータのリスト(配列)。テンプレートでは
{foreach ($trackbacks as $tb)}
の様に使われています。
このとき、$tbに代入されるデータ(連想配列)は以下の通り。
$tb.tid     -- トラックバックID
$tb.eid     -- 記事ID
$tb.title   -- トラックバックした記事のタイトル
$tb.url     -- トラックバックした記事のURL
$tb.name    -- ブログ名
$tb.excerpt -- 本文
$tb.cstamp  -- 投稿日時
$calendar
カレンダーHTML
$calendar.table      -- table版カレンダーHTML
$calendar.vertical   -- 1行(縦)版カレンダーHTML
$calendar.horizontal -- 1行(横)版カレンダーHTML
$comments
表示しようとしているカテゴリ一覧データのリスト(配列)。テンプレートでは
{foreach ($categories as $cat)}
の様に使われています。
このとき、$catに代入されるデータ(連想配列)は以下の通り。
$cat.cid   -- カテゴリID
$cat.name  -- カテゴリ名
$cat.count -- カテゴリ内の記事数
$plugins
プラグインが表示しようとしているオブジェクトのリスト(配列)。テンプレートでは
{foreach ($plugins as $p)}
の様に使われています。
このとき、$pに代入される記事データ(連想配列)は以下の通り。
$cat.title    -- オブジェクトのタイトル
$cat.string   -- 内容
$cat.template -- 内容を記述したHTMLテンプレートファイル名
$recentEntries
表示しようとしている「最近の記事」データのリスト(配列)。テンプレートでは
{foreach ($recentEntries as $r)}
の様に使われています。
このとき、$rに代入されるデータ(連想配列)は以下の通り。
$r.eid   -- 記事ID
$r.title -- 記事のタイトル
$recentComments
表示しようとしている「最近のコメント」データのリスト(配列)。テンプレートでは
{foreach ($recentComments as $r)}
の様に使われています。
このとき、$rに代入されるデータ(連想配列)は以下の通り。
$r.eid    -- コメントされた記事ID
$r.cstamp -- コメント投稿日時
$r.name   -- コメント投稿者名
$archives
表示しようとしている「過去ログ」データのリスト(配列)。テンプレートでは
{foreach ($archives as $a)}
の様に使われています。
このとき、$aに代入される記事データ(連想配列)は以下の通り。
$r.ym -- リンク用「年月」(20XX01〜20XX12)
$r.y  -- 過去ログの「年」
$r.m  -- 過去ログの「月」(1〜12)
$links
表示しようとしている「リンク」データのリスト(配列)。テンプレートでは
{foreach ($links as $link)}
の様に使われています。
このとき、$linkに代入されるデータ(連想配列)は以下の通り。
$link.name  -- リンクグループ名
$link.group -- リンクグループ内のリンクデータのリスト(配列)
さらにこの時、$link.groupは
{foreach ($link.group as $l)}
の様に使われています。
このとき、$lに代入されるデータ(連想配列)は以下の通り。
$link.url   -- URL
$link.title -- サイト名
$profiles
表示しようとしている「プロフィール」データのリスト(配列)。テンプレートでは
{foreach ($profiles as $p)}
の様に使われています。
このとき、$pに代入される記事データ(連想配列)は以下の通り。
$r.aid  -- ユーザーID
$r.name -- ユーザー名

date_formatについて

テンプレート中、日時のフォーマット(整形)に
{date_format("Y-m-d H:i:s", $xxxxx)}
の様に「date_format」命令を使用しています。この "Y-m-d H:i:s" の部分を編集することで日時の表示を変更することができます。
例えば、2004年12月1日 午後3時12分27秒を "Y-m-d H:i:s" でフォーマットすると
2004-12-01 15:12:27
となります。フォーマット指定文字列に使用可能な文字は以下の通りです。
a"am" または "pm"
A"AM" または "PM"
BSwatch Internet time。"000" 〜 "999"
d日(2桁)。"01" 〜 "31"
D曜日。3文字の英語表記。"Mon" から "Sun"
F月。フルスペルの英文表記。"January" から "December"
g時。12時間単位。"1" 〜 "12"
G時。24時間単位。"0" 〜 "23"
h時(2桁)。12時間単位。"01" 〜 "12"
H時(2桁)。24時間単位。"00" 〜 "23"
i分。"00" 〜 "59"
j日。"1" 〜 "31"
l(小文字"L")曜日。フルスペルの英文表記。"Sunday" 〜 "Saturday"
L閏年であるかどうかを表す論理値。"1"なら閏年。"0"なら閏年ではない。
m月。数字。"01" 〜 "12"
M月。3文字の英文表記。"Jan" 〜 "Dec"
n月。数字。"1" 〜 "12"
Oグリニッジ標準時(GMT)との時間差。"-1200"〜"+1200"
rRFC822 フォーマットされた日付。例えば "Example: Thu, 21 Dec 2000 16:01:07 +0200"
s秒(2桁)。"00" 〜 "59"
S英語形式の序数を表すサフィックス。"st", "nd", "rd" または "th"
t指定した月の日数。"28" 〜 "31"
Tこのマシーンのタイムゾーンの設定。例えば "JST"
UUNIXタイムスタンプ。1970年1月1日0時0分0秒からの秒数。
w曜日。数値。"0"(=日曜) 〜 "6"(=土曜)
W月曜日に始まる年単位の週番号。
Y年(4桁)。"1999", "2004"など。
y年(2桁)。1999 = "99", 2004 = "04"など。
z年間の通算日。"0" 〜 "366"
Zタイムゾーンのオフセット秒数。"-43200" 〜 "43200"