ひとつ前のエントリと関連してます. 最初がちょっと繰り返しで冗長ですが...
左サイドバーにある、月別アーカイブページへのリンクリスト. 年をリスト表示して、ここに折りたたみを仕込み、開くと一階層下に各年の月別リストが出るようになっています.
メインページでは、今年のリストだけは折りたたみが作動しないようにしてあり、この方法については以前行っていました. これと整合性をとるために、日付アーカイブページのリスト部分も同じ動作にすることを考えていました.
日付アーカイブページの場合、折りたたませないのは今年のリストではなく、そのアーカイブの当該年のリストということになります. つまり、2005 年 11 月のアーカイブなら、2005 年、2006 年 2 月 15 日のアーカイブなら、2006 年といった感じです.
これが、ずーっとできませんでした. 今日、突然のひらめきで解決したので、その過程を自分メモでまとめておきます.
メインページでの処理は、リストを挙げていく過程で、年が今年のリストの場合だけ、menufolder.js(折りたたみに使っているスクリプト 小粋空間さま提供)を作動させないようにするという方法でやりました. 条件分岐には、Compare プラグインを使用しました.
日付アーカイブページも、全くのアナロジーでできるとふんでいたのですが、これが甘かったんです.
Compare プラグインで何を比較すればいいか.
片方はリストアップされていくアーカイブの日付(の年部分)ですから、<$MTArchiveDate format="%Y$> ということになります. もう一方は、当該アーカイブの日付ですから、<$MTArchiveDate format="%Y$>.
ん? なんだこりゃ. 比較するものが同じ?? とういことで考えることしばし. そのまま頓挫したのが以前の状態でした.
リスト表示についていろいろ考えながら、今日、再チャレンジしました.
月リストの部分は、<MTArchiveList archive_type="Monthly"> 〜 </MTArchiveList> の中で処理されてます.
このコンテクストで <$MTArchiveDate$> を書くと、それはリストそのものになってしまうわけで、当該アーカイブの日付を取ることはできません. 間違ってないよね.
もし、<MTArchiveList> の外(前)で <$MTArchiveDate$> の内容を取ることができれば、それは当該アーカイブの日付になるでしょう.
その値を <MTArchiveList> の中に持ち込んで、リストアップされていく <$MTArchiveDate$> と比較できれば、なんとかなりそうだと考えました.
そんなことができるのか. 何か変数を設定してそこに値を代入し、その変数を参照するしかありません. プラグインが要りそうな予感.
とりあえず、「MovableType 代入」でググりました. トップのリンクは six apart にあるプラグインの紹介. やはりね.
行ってみると、某参考書等でお世話になっている藤本壱さんのプラグインじゃないですか. 早速たどり、記事を読んでみます.
数分後、プラグインなしでもできることが分かりました.
使うのは、<MTSetVarBlock> と <MTGetVar>. まだまだ知らんことばかりですなぁ.
リスト表示部の( <MTSetVarBlock name="thisyear"><$MTArchiveDate format="%Y"$></MTSetVarBlock>
として、変数 'thisyear' に当該アーカイブの日付(年)を取得します.
で.リスト表示部の中で、
<MTIfEqual a="[MTGetVar name='thisyear']" b="[MTArchiveDate format='%Y']">
のようにして、'thisyear' の値とリスト表示される年の値とを比較. 条件分岐で、menufolder.js が作動しないようにする仕組みは、メインページで以前やったのと全く同じです.
結果、うまくいきました. やっぱり、MovableType はすごいです.
