/********************************************************************
 *
 *  PUBLOG抹茶ブログモジュールデザインテンプレート解説
 *  $Id: blog_template.html,v 1.17 2004/10/05 10:11:03 fukami Exp $
 *
 ********************************************************************/

●はじめに

 「総てを理解しようとするな。
     なぜなら、あなたが修正しなくちゃいけない部分は、
                  きっとほんのちょっとに違いないから」

以下、PUBLOG抹茶・blogモジュールのテンプレート解説ですが、
基本的にデザイン等を変更したいだけであれば、CSSの方を修正していく
ことになりますので、以下の解説はあんまり関係ありません。
ただし、PUBLOG抹茶の開発コンセプトのひとつに、

 「ディープな要望に、ディープに応える」
	
というのがありますので、今回のテンプレートはディープにできており、
以下の解説もディープになっております。どうしても足を踏み入れたい
という漢どもを止めるすべは我々にありません。
どうぞ踏み込んでみてください。
ただ、いきなり、「変数」だとか「ループ」だとか「オブジェクト」だとか
いう言葉が

 あたりまえのように
	
出てきますので、そこらへんは覚悟しておいてください。

---------------------------------------------------------------------
●PUBLOG抹茶のテンプレートエンジン
抹茶のテンプレートエンジンは、「Smarty(すまーてぃ)」を使っています。
Smarty は、柔軟性が高く高機能なことで評価されているテンプレートエンジンです。
PUBLOGの blog テンプレート上で Smarty の機能はひととおり使えますので、
バリバリ使いこなしたい人向けの詳細解説は Smarty ドキュメントに譲ります。
ここでは、PUBLOGテンプレートを作る際に最低知っておいて欲しい部分を解説していきます。

・Smarty 日本語マニュアル(ヘビーに使いこなしたい人は熟読!)
http://sunset.freespace.jp/smarty/
http://sunset.freespace.jp/smarty/SmartyManual_2-6-2J_html/

・Smarty 本家サイト(英語)
http://smarty.php.net/


---------------------------------------------------------------------
●TIPS
最初に誰でもひっかかるのでメモしておきます。
SmartyテンプレートにJavaScriptをそのまんま書くと、エラーがでます。
JavaScriptなどに使われる{}記号を、Smartyが解釈しようとして混乱するからなんですが、
これを避けるには、JavaScript全体を
{literal}
{/literal}
で囲めばOKです。

---------------------------------------------------------------------
●Smarty を使いこなすと、なにができるのか
・あらかじめ、テンプレートに対して割り当てられたデータを表示することができます
・必要なデータを、プログラムから取り出して表示することができます(オブジェクトアクセス)
・条件によって、表示する内容を変化させることができます(組込関数:条件分岐)
・リストを順番に表示することができます(配列と組込関数:ループ処理)
・変数に入ったデータを加工処理して表示することができます(カスタム関数)


---------------------------------------------------------------------
●そんなわけで
 Smarty は、いろんなことができるテンプレートエンジンなのです。使いこなせば、
ウェブサイトでの表現が豊かになり、ウェブログの編集作業も楽になります。

---------------------------------------------------------------------
●テンプレートの場所
ブログモジュールのテンプレートの場所は、
/design/blog/default/
です。
ただし、
/design/blog/(thread-id)/
というディレクトリを作って、その中に置くこともできます。
スレッド名と同じディレクトリを作ると、その中のテンプレートが
優先的に使われます。
この機能を使うと、ブログスレッドごとに違うデザインにすることができます。


---------------------------------------------------------------------
●PUBLOG抹茶のウェブログテンプレートの種類
拡張子が.tpl のものが Smarty のテンプレートファイルです。

default.css : CSSファイル
index.tpl: そのブログのトップページ
entry.tpl: ブログのエントリーページ
entrylist_year.tpl: エントリーが存在する年のリストページ
entrylist_month.tpl: エントリーが存在する月のリストページ(1年分)
entrylist_day.tpl: エントリーが存在する日のリストページ(1ヶ月分)
entrylist_whole_day.tpl: エントリーが存在する時間のリストページ(1日分)
commentform.tpl: コメントフォーム(他のファイルから呼び出して使います)

---------------------------------------------------------------------
●entry.tpl に割り当てられている変数(大文字と小文字は区別されます)

○共通
{$default_css.project}
プロジェクトCSSへのURI
{$default_css.blog}
このブログのCSSへのURI

○このブログに関係するもの
{$Blog.title}
ブログのタイトル
{$Blog.id}
スレッドID
{$Blog.tagline}
ブログの説明

○エントリーに関係するもの
{$Entry.id}
エントリーID
{$Entry.uri}
エントリーのURI
{$Entry.title}
エントリーのタイトル
{$Entry.link}
主要リンク先
{$Entry.content}
本文
{$Entry.summary}
要約
{$Entry.author.name}
エントリーした人の名前
{$Entry.author.trip}
エントリーした人のトリップ
{$Entry.issued}
エントリー日時(W3C形式)
{$Entry.modified}
最終更新日時(W3C形式)
{$Entry.virtualdirectory}
バーチャルディレクトリーパス

○コメントリスト関連
{$Commentlist}
コメントデータが入った配列。インデックスは0から始まる数値
テンプレート内で表示する場合は{section}{/section}を使います。
例)
		{section name=i loop=$Commentlist}
		表示したい内容
		{/section}

{$Commentlist[i].id}
コメントID(コメントされた順番に、1から数字が振られています)
{$Commentlist[i].content}
コメント本文
{$Commentlist[i].author.name}
コメントした人の名前
{$Commentlist[i].author.trip}
コメントした人のトリップ
{$Commentlist[i].issued}
コメント日時(W3C形式)
{$Commentlist[i].title}
コメントのタイトル
{$Commentlist[i].link}
コメント主要リンク

○その他
{$Project.title}
プロジェクトタイトル
{$Project.cd}
プロジェクトコード
{$Project.tagline}
プロジェクトの説明
{$url_this_entry}
このページのURL
{$TrackbackRDF}
埋め込みトラックバック情報
{$TrackbackURL}
このエントリーのトラックバックURL
{$design_template_dir}
デザインテンプレートの場所(ディレクトリ)。http:// ではじまり、/ で終わる。
{$rss_1_0_url}
RSS 1.0 の出力先のURL

{$dedio_rss_url}
dedio 用 RSS(1.0) の出力先のURL

{$url_prev_entry}
前のエントリー
{$url_next_entry}
次のエントリー

{$http_project_top_dir}
プロジェクトトップページ
{$http_thread_top_dir}
スレッドトップページ


---------------------------------------------------------------------
●entry_year.tpl に割り当てられている変数(大文字と小文字は区別されます)

○共通
{$default_css.project}
プロジェクトCSSへのURI
{$default_css.blog}
このブログのCSSへのURI

○このブログに関係するもの
{$Blog.title}
ブログのタイトル
{$Blog.id}
スレッドID
{$Blog.tagline}
ブログの説明

○エントリーリスト関連
{$Entrylist_link_year}
エントリーリストデータが入った配列。インデックスは0から始まる数値
テンプレート内で表示する場合は{section}{/section}を使います。
例)
		{section name=i loop=$Entrylist_link_year}
		表示したい内容
		{/section}
{$Entrylist_link_year[i].year}
年を表す4桁の数字
{$Entrylist_link_year[i].link}
各年のページへのリンク

○その他
{$Project.title}
プロジェクトタイトル
{$Project.cd}
プロジェクトコード
{$Project.tagline}
プロジェクトの説明
{$design_template_dir}
デザインテンプレートの場所(ディレクトリ)。http:// ではじまり、/ で終わる。
{$rss_1_0_url}
RSS 1.0 の出力先のURL

{$dedio_rss_url}
dedio 用 RSS(1.0) の出力先のURL

{$http_project_top_dir}
プロジェクトトップページ
{$http_thread_top_dir}
スレッドトップページ

---------------------------------------------------------------------
●entry_month.tpl に割り当てられている変数(大文字と小文字は区別されます)

○共通
{$default_css.project}
プロジェクトCSSへのURI
{$default_css.blog}
このブログのCSSへのURI

○このブログに関係するもの
{$Blog.title}
ブログのタイトル
{$Blog.id}
スレッドID
{$Blog.tagline}
ブログの説明

○エントリーリスト関連
{$Entrylist_link_year}
エントリーリストデータが入った配列。インデックスは0から始まる数値
テンプレート内で表示する場合は{section}{/section}を使います。
例)
		{section name=i loop=$Entrylist_link_year}
		表示したい内容
		{/section}
{$Entrylist_link_month[i].year}
年を表す4桁の数字
{$Entrylist_link_month[i].link}
各年のページへのリンク

○その他
{$Project.title}
プロジェクトタイトル
{$Project.cd}
プロジェクトコード
{$Project.tagline}
プロジェクトの説明
{$design_template_dir}
デザインテンプレートの場所(ディレクトリ)。http:// ではじまり、/ で終わる。
{$rss_1_0_url}
RSS 1.0 の出力先のURL

{$dedio_rss_url}
dedio 用 RSS(1.0) の出力先のURL

{$http_project_top_dir}
プロジェクトトップページ
{$http_thread_top_dir}
スレッドトップページ

---------------------------------------------------------------------
●entry_day.tpl に割り当てられている変数(大文字と小文字は区別されます)

○共通
{$default_css.project}
プロジェクトCSSへのURI
{$default_css.blog}
このブログのCSSへのURI

○このブログに関係するもの
{$Blog.title}
ブログのタイトル
{$Blog.id}
スレッドID
{$Blog.tagline}
ブログの説明

○エントリーリスト関連
{$Entrylist_link_year}
エントリーリストデータが入った配列。インデックスは0から始まる数値
テンプレート内で表示する場合は{section}{/section}を使います。
例)
		{section name=i loop=$Entrylist_link_year}
		表示したい内容
		{/section}
{$Entrylist_link_day[i].year}
年を表す4桁の数字
{$Entrylist_link_day[i].link}
各年のページへのリンク

○その他
{$Project.title}
プロジェクトタイトル
{$Project.cd}
プロジェクトコード
{$Project.tagline}
プロジェクトの説明
{$design_template_dir}
デザインテンプレートの場所(ディレクトリ)。http:// ではじまり、/ で終わる。
{$rss_1_0_url}
RSS 1.0 の出力先のURL

{$dedio_rss_url}
dedio 用 RSS(1.0) の出力先のURL

{$http_project_top_dir}
プロジェクトトップページ
{$http_thread_top_dir}
スレッドトップページ

---------------------------------------------------------------------
●index.tpl に割り当てられている変数(大文字と小文字は区別されます)
index.tpl は、ブログごとのトップページを生成するためのテンプレートです。
このテンプレートは少々特殊で、サーバー負荷を極力減らすために、
データは、テンプレート内から呼び出して使う形になっています。
呼び出しは、{Blogdata}というオブジェクトを経由しておこなわれます。

◆プロジェクトデータの呼び出し方法
{Blogdata->assign name="project" method='get' assign="Project"}
{$Project} という変数に、プロジェクトデータが割り当てられます。
プロジェクトデータが不要な場合は、はずしてください。

◆ブログ基本データの呼び出し方法
{Blogdata->assign name="thread" method='get' assign="Blog"}
{$Blog} という変数に、ブログの基本データ(スレッド情報)が割り当てられます。

◆全エントリーリストの呼び出し方法
{Blogdata->assign name="entrylist" method='entrylist_all' assign="Entrylist"}
{$Entrylist} という変数に、総てのエントリーリストを配列で割り当てます
{section name=i loop=$Entrylist}
{/section}
でループさせて使います。
最新エントリーから指定した件数を取得したい場合は last="欲しい件数" と書きます。
ex.) 最新5件
{Blogdata->assign name="entrylist" method='entrylist_all' last="5" assign="Entrylist"}

表示順はデフォルトが日時降順(新しいエントリーから)です。
古いもの順のデータが欲しい場合は、 sort="asc" と記述します。
ex.)
{Blogdata->assign name="entrylist" method='entrylist_all' sort="asc" assign="Entrylist"}


◆個別エントリーの詳細データの呼び出し方法
{Blogdata->assign_entry_data id=$Entrylist[i].id assign="Entry"}
上記エントリーリストのループの中でこう記述することにより、
個々のエントリーに関する詳細なデータを取り出すことができます。

◆個別エントリーの詳細データのオマケタグ
{$Entry.url_this_entry}
そのエントリー自身のURL
{$Entry.trackback_url}
そのエントリーに対するトラックバックURL
{$Entry.writeback_url}
そのエントリーに対するライトバックURL


◆エントリーごとのコメントデータの呼び出し方法
{Blogdata->assign_commentlist_data id=$Entrylist[i].id assign="Commentlist"}
上記エントリーリストのループの中でこう記述することにより、
個々のエントリーに対するコメントのデータを取り出すことができます。
コメントは、これまた配列になっていますので、
{section name=c loop=$Commentlist}
{/section}
でループさせて使います。つまり、エントリーリストのループの中に、
さらにコメントのループがある、といった形になります。

◆カレンダーの呼び出し方法
{Blogdata->plugin name="calendar" type='tor' pos="now" assign="calendar"}
カレンダーは、プラグイン扱いです。
上記呼び出し方法は、[tor]タイプのカレンダーを呼び出す方法です。

その他に
・bar
・mt
・lived
というカレンダーのタイプがあります。


◆最近のライトバック
{Blogdata->assign_recently_writeback project_cd=$Project.cd thread_id=$Blog.id last="10" assign="RecentlyWriteback"} 
てな感じで記述すると、最近のライトバックのデータを取得できます。
で、例えば、
---
{section name=i loop=$RecentlyWriteback} 
  • {if $RecentlyWriteback[i].title == "no title"} {$RecentlyWriteback[i].author} {else} {$RecentlyWriteback[i].title} ( {$RecentlyWriteback[i].author} ) {/if} {$RecentlyWriteback[i].entry_title}
  • {/section} --- と書けば、最近のライトバックの表示ができます。 ○その他 {$rss_1_0_url} RSS 1.0 の出力先のURL {$dedio_rss_url} dedio 用 RSS(1.0) の出力先のURL {$dedio_playlist_url} dedio 用 playlist.xml の出力先のURL {$design_template_dir} デザインテンプレートの場所(ディレクトリ)。http:// ではじまり、/ で終わる。 {$http_project_top_dir} プロジェクトトップページ {$http_thread_top_dir} スレッドトップページ --------------------------------------------------------------------- ■拡張オリジナルテンプレート ファイル名の先頭に ex_ がついたテンプレートファイルは、 index.tpl と同じ処理をおこなった後、ファイル名の拡張子に.html をつけて スレッドアーカイブディレクトリのトップに保存されます。 例えば、 ex_XXXXX.tpl という名前をつければ、 ex_XXXXX.html というファイル名で保存されます。 デザインを変えた複数のトップページが欲しい人は使ってみてください。 =============== 参考資料: 特集:第3回 PHPを思うままに操れるようになる「MVC」と「Smarty」(IT Media) http://www.itmedia.co.jp/enterprise/0402/19/epn01_2.html