チャレンジ! Movable TypeをCMSとして使ってみよう!

第9回 パンくずナビゲーション部分を作る

この記事を読むのに必要な時間:およそ 5 分

くれま先輩:じゃ,これを出力しているそれぞれのサブテンプレートをそれぞれ説明してみるね。まずは,⁠entry_template(ブログ記事⁠⁠」で実行される部分だよ。

「entry_template(ブログ記事⁠⁠」で実行されるサブテンプレート

<div id="topicPath">
<p>
<a href="<mt:BlogUrl />">トップ</a>
&nbsp;&raquo;&nbsp;
<mt:ParentCategories glue="&nbsp;&raquo;&nbsp;">
<a href="<mt:CategoryArchiveLink />"><mt:CategoryLabel /></a>
</mt:ParentCategories>
&nbsp;&raquo;&nbsp;
<mt:EntryTitle />
</p>
<!-- end div#topicPath --></div>

ほげ山くん:mt:ParentCategoriesって,⁠最上位のカテゴリから現在のカテゴリまでを繰り返して表示するブロックタグ」ですよね?ということはこれって,サブカテゴリがあっても対応できるってことなんですかね?

くれま先輩:当たり!mt:ParentCategoriesだったら,サブカテゴリがある場合でも「トップ&nbsp;&raquo;&nbsp;トップレベルカテゴリ&nbsp;&raquo;&nbsp;サブカテゴリ&nbsp;&raquo;&nbsp;ブログ記事タイトル」というようにループして出力してくれるからね。

ほげ山くん:今後,もしかしたら,カテゴリの中にサブカテゴリを作る可能性もありますものね。

くれま先輩:ありえるよね。今後のことも考慮して,今回はこうしてみたわけ。そして,glueモディファイアの値「&nbsp;&raquo;&nbsp;」が,mt:ParentCategoriesで繰り返される部分のつなぎ目に出力されるの。

ほげ山くん:なるほどー。

「page_template(ウェブページ⁠⁠」で実行されるサブテンプレート

<div id="topicPath">
<p>
<a href="<mt:BlogUrl />">トップ</a>&nbsp;&raquo;&nbsp;<mt:PageTitle />
</p>
<!-- end div#topicPath --></div>

くれま先輩:これは単純だよね。

ほげ山くん:mt:PageTitleで,ページのタイトルが出力されているだけですね。

「category_archive(カテゴリーアーカイブ/ブログ記事のリスト⁠⁠」で実行されるサブテンプレート

<div id="topicPath">
<mt:SetVarBlock name="arctitle"><mt:ArchiveTitle encode_html="1" /></mt:SetVarBlock>
<p>
<a href="<mt:BlogUrl />">トップ</a>
&nbsp;&raquo;&nbsp;
<mt:ParentCategories glue="&nbsp;&raquo;&nbsp;">
<mt:SetVarBlock name="catlabel"><mt:CategoryLabel encode_html="1" /></mt:SetVarBlock>
<mt:If name="catlabel" ne="$arctitle">
<a href="<mt:CategoryArchiveLink />"><mt:CategoryLabel encode_html="1" /></a>
<mt:Else>
<mt:CategoryLabel encode_html="1" />
</mt:If>
</mt:ParentCategories>
</p>
<!-- end div#topicPath --></div>

ほげ山くん:これにもmt:ParentCategoriesが使われてますけど…。なんだかmt:SetVarBlockで「arctitle」という名前の変数を設定してます?

くれま先輩:よく観察してますなー。よく見るとわかるけど,mt:ParentCategoriesによるループに入る前に,変数「arctitle」の値として現在のアーカイブのタイトル(この場合はカテゴリ名)を設定しているでしょ。で,mt:ParentCategoriesのループの中でmt:CategoryLabelを使って,変数「catlabel」の値としてループの中に出てくるカテゴリ名を設定。次のmt:If name="catlabel" ne="$arctitle"は,何をしているかわかる?

ほげ山くん:えーっと。現在のカテゴリ名(arctitle)とループの中のカテゴリ名(catlabel)が違う場合(ne)は,処理が実行されるんですね?

くれま先輩:よくできました。何でこういうことをするかというと,mt:ParentCategoriesによるループの中でカテゴリ名にカテゴリーアーカイブへのリンクがついているじゃない?

ほげ山くん:<a href="<mt:CategoryArchiveLink />"><mt:CategoryLabel encode_html="1" /></a>の部分ですね。

くれま先輩:そうそう。でも,いま見ているページへのリンクも生成されると,ちょっと使いにくいでしょ? なので,いま見ているページのカテゴリ名の場合は,mt:Else以下に記述されているリンクなし部分が出力されるように,条件分岐しているんだよ。

「search_results(検索結果⁠⁠」で実行されるサブテンプレート

<div id="topicPath">
<p>
<a href="<mt:BlogUrl />">トップ</a>&nbsp;&raquo;&nbsp;「<mt:SearchString />」の検索結果</p>
<!-- end div#topicPath --></div>

ほげ山くん:検索結果テンプレートの場合は,mt:SearchStringというMTタグを使っているんですね。

くれま先輩:検索に使用された文字列を,ここに出力させたいんだよね。⁠トップ&nbsp;&raquo;&nbsp;「りんご」の検索結果」とかね。

ほげ山くん:これって,タグクラウドをクリックして検索結果テンプレートを見た場合でも,ちゃんと動作してますね。

その他の場合に実行されるサブテンプレート

<div id="topicPath">
<p>
<a href="<mt:BlogUrl />">トップ</a>&nbsp;&raquo;&nbsp;サイトマップ</p>
<!-- end div#topicPath --></div>

くれま先輩:で,さっき話題に出たこの部分ね。

ほげ山くん:今回のサイトでは,条件分岐して残るテンプレートが「サイトマップ」しかないからですよねー。了解しました!

くれま先輩:そんな訳で,今回はちょっと詳しくパンくずナビゲーション部分のサブテンプレートを解説してみましたが,色々と応用の効く内容だと思いますので,試してみてください!そして,次回こそ,ブログ記事リストテンプレートを完成させましょう!!

次回予告

  • 次回こそ,ブログ記事リストテンプレートを完成させる。

著者プロフィール

黒野明子(くろのあきこ)

1973年生まれ。1995年 武蔵野美術大学短期大学部専攻科グラフィックデザインコース修了。

ファッションカメラマン事務所、広告系デザイン事務所、Web制作会社勤務を経て、2003年よりフリー。Webデザイン・企画を中心に、DTPデザインなども行う。

現在、武蔵野美術大学共通デザイン研究室非常勤講師及び株式会社デジタルスケープ・PreJOBトレーニング講師も兼務。2005年秋頃から業務としてMTサイトの構築を始め、現在の業務のほとんどでMovable Typeを使用している。

著書:

『CMSとして使うMovable Typeガイドブック』 (翔泳社、共著)

『Movable Typeプロフェッショナル・スタイル』(毎日コミュニケーションズ、共著)

URL:http://cremadesign.jp/