さて,いよいよリンクページの作成に入る.
テンプレートとしては一番技巧を凝らす羽目になる物を一番最初に作ったものだから,余計苦労する.
リンクページの構成は,「上下のナビゲーションバー」「左サイドのリンク内カテゴリのメニュー」「右側本文」となっている.
苦労したのは,リンク内カテゴリのメニューである.このメニューは,表示されているカテゴリだけ色を変え,リンクも張らないようにしている.ソースで言えば,以下の通り.
<div id="linkmenu">
<ul id="linkmenu-list">
<li><a href="/archive/link/web/">Webサイト作成</a></li>
<li id="active">ソフトウェア</li>※
<li><a href="/archive/link/programming/">プログラミング</a></li>
<li><a href="/archive/link/hardware/">ハードウェア</a></li>
<li><a href="/archive/link/zaurus/">Zaurus</a></li>
……
……
……
URIの部分は若干ウソ.長かったので短くしたが,説明には影響しない.
なんて事はないソースだ.が,これをテンプレートにしようとした時に,※の行がネックになった.作成されるページが何であるかはMovable Typeの知ったこっちゃないので,どこかで明示してやらなければならない.でも,MTSubCategoriesを使って,普通に表示すると,全部同じになってしまう.
試行錯誤をした上で,次のように策を弄した.
まず,メニューを出力するループに入る前にMTSetVarを使って,今作成するページが何のカテゴリなのかを変数current_catにセットする.
この時,セットする文字列は<$MTCategoryLabel$>にしたいのだが,Movable Type標準では,テンプレートタグのアトリビュートにテンプレートタグは使えないようだったので,MTTagInvokeというプラグインを導入した.
今回は次の通り書いた.
<MTTagInvoke tag_name="MTSetVar" name="current_cat">
<MTTagInvokeAttribute name="value"><$MTCategoryLabel$></MTTagInvokeAttribute>
</MTTagInvoke>次に,メニューの出力部.ここでは,<MTSubCategories>でカテゴリ名を出力させていくわけだが,その際に,<MTCategoryLabel>と,変数current_catを評価して,同じだった場合は,
<li id="active">カテゴリ名</li>
を,異なる場合は<li><a href="カテゴリアーカイブのURI">カテゴリ名</a></li>
を出力する.この「評価」をMovable Type標準で行うことができなかったため,Compareを導入する.テンプレートタグも使って,「等しい」「より大きい」などの比較ができるようになる.このプラグインについては,Six Apart公式に日本語の説明があるので参照のこと.
前にすでに導入しているプラグインも使用して,コードは以下の通り.
<ul id="linkmenu-list">
<MTSubCategories>
<MTIfIsDescendant parent="200リンク">
<MTFilterCategories exclude="200リンク">
<MTIfEqual a="[MTGetVar name='current_cat']" b="[MTCategoryLabel]">
<li id="active"><$MTCategoryLabel cutfirstchar="3"$></li>
<MTElse>
<li><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel cutfirstchar="3"$></a></li>
</MTElse>
</MTIfEqual>
</MTFilterCategories>
<MTSubCatsRecurse>
</MTIfIsDescendant>
</MTSubCategories>
</ul>
何とかなったので,今度は,ページを分割できないかと思いたつ.
MTPaginateはすぐ見つかった.これは,長いページを分割し,ページへのメニューも自動で吐いてくれるプラグインである.その機能はPHPで実現しているので,急にMovable TypeをPHP化しなくてはならなくなった.
私がMTPaginateを使いたいのは,カテゴリー・アーカイブだけだったので,ここだけPHPにしたい.ここで若干はまる.
まず,アーカイブを.phpで出力する方法がすぐには分からなかった.いろいろいじっていて,「設定」→「公開」→「アーカイブ・マッピング」が怪しいと思ったので,いじり倒して,カテゴリー・アータイブで「カスタマイズする」を選んで「%c/index.php」と書いたら,書くアーカイブディレクトリにindex.phpという名前でファイル出力されることが分かった.
こんなカンに頼った作り方でいいのかと思うんだが,マニュアルがようわからんので仕方がない.
で,だ.偉大なる先達たちが「さくらはphpは705にせんと動かん,Movable Typeは再構築すると666でファイル吐くのであかん.したがって,設定ファイルにHTMLPerms 0777とかUploadPerms 0777とか書け」という情報を載せているんだが,そんな動作になんないのだ.
どうなったかというと,
- 設定ファイルにそういう文字列を書いても新規ファイルは属性705にならない.
- できたファイルをFTPで705にした上で再構築しても属性666に戻らない.
……しばらく新しいカテゴリ作らないだろうから,もういいや.
あと,さくらインターネットでは,ファイルだけじゃなくてディレクトリも755か705にしなければならないことに気がつかなくて,けっこうはまった.
ここで色を出す.
Movable Typeって検索機能ついてるなあ.これでリンク内の検索できないかなあ.マニュアルの代替テンプレートの項を見たら,なんかすぐできそうだったので,もにょもにょとテンプレートを作る.
以上でリンクページ作成終了.いや,もう,これだけでヘトヘトになったよ.一番ヤマの高いところから手を付けた気がする.