ほぼテンプレートの状態で使っていたサイドバーですが,表示している内容によって内容を変えるようにしました。具体的には,
・メインのページを表示した時
・個別記事のページしたとき時
・各カテゴリのアーカイブを表示した時
・各カテゴリの月別アーカイブを表示した時
・月別アーカイブを表示した時
・検索結果を表示した時
の6パターン。細かいことをいうと,メインページと個別記事ページは同じものを表示しているとか,同じ検索結果でもタグ検索をした場合だけにタグリストが表示される,とか微妙な違いはありますが,一応,作業上の概念として6パターンということで。
で,わりと軽い気持ちで始めた作業だったんですが,記事一覧系のウィジェットが思い通りに動かなくて意外に難儀。最終的には,かなり泥臭い方法で対処してしまいました。お恥ずかしい(笑
MTのテンプレートが持っていた「最近の記事一覧」というウィジェットは,表示しているアーカイブ内の記事一覧を最近の物から10件表示する,という動きをします。なにげに僕のニーズに合わない作りなのでした。
僕は,
・ブログ内記事のすべての記事の中から最近の物を10件表示する
・カテゴリアーカイブ内の中から最近の物を10件表示する
・カテゴリ月別アーカイブと月別アーカイブ内の記事をすべて表示する
というウィジェットが欲しかったので,これを作ります。頑張れば一つのウィジェット内で分岐して表示させることもできるのですが,考えてるうちに面倒くさくなったので,全部バラバラにウィジェットを作りました。
各ウィジェットの内容は次のとおり。後者二つはテンプレートを少しアレンジしただけです。
●ブログ内記事のすべての記事の中から最近の物を10件表示する<mt:If tag="BlogEntryCount">
<mt:ArchiveList lastn="10">
<mt:ArchiveListHeader>
<div class="widget-recent-entries widget-archives widget">
<h3 class="widget-header">最近の記事</h3>
<div class="widget-content">
<ul>
</mt:ArchiveListHeader>
<li><a href="<$mt:Archivelink$>"><$mt:ArchiveTitle$></a></li>
<mt:ArchiveListFooter>
</ul>
</div>
</div>
</mt:ArchiveListFooter>
</mt:ArchiveList>
</mt:If>
●カテゴリアーカイブ内の中から最近の物を10件表示する<mt:If tag="BlogEntryCount">
<mt:Entries lastn="10">
<mt:EntriesHeader>
<div class="widget-recent-entries widget-archives widget">
<h3 class="widget-header"><$mt:CategoryLabel$>: 最近の記事</h3>
<div class="widget-content">
<ul>
</mt:EntriesHeader>
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
<mt:EntriesFooter>
</ul>
</div>
</div>
</mt:EntriesFooter>
</mt:Entries>
</mt:If>
●カテゴリ月別アーカイブと月別アーカイブ内の記事をすべて表示する<mt:If tag="BlogEntryCount">
<mt:Entries>
<mt:EntriesHeader>
<div class="widget-recent-entries widget-archives widget">
<h3 class="widget-header"><$mt:ArchiveTitle$>: 記事一覧</h3>
<div class="widget-content">
<ul>
</mt:EntriesHeader>
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
<mt:EntriesFooter>
</ul>
</div>
</div>
</mt:EntriesFooter>
</mt:Entries>
</mt:If>
次はページごとに表示すべきウィジェットセットの作成。これはいくつが方法があるんですが,↑でかなり泥臭いことをやってしまったので,ここは少しスマートに攻めるために,表示パターンごとにウィジェットセットを作ることにしました。下の画像の下の5個がそれです。
で,画像を見てピンと来た方もいると思うんですが,ここでもう一つ回りくどいことをやってて,「どのページでどのウィジェットセットを表示させるかを指定するウィジェット」を作り,「そのウィジェットを表示するだけのウィジェットセット」を作っています(笑
なんでこんなことをやったかというと,MTのテンプレートにあるサイドバー用のモジュールテンプレートをまったく変更することなく作業が完了するから。一つの作業をするのに画面を行き来するのが面倒なので,ウィジェットの設定画面内で完結させてみました。 で,「どのページでどのウィジェットセットを表示させるかを指定するウィジェット」の中身は次のとおりです。
<mt:IfArchiveType archive_type="Individual">
<$mt:WidgetSet name="メインインデックス"$>
</mt:IfArchiveType><mt:If name="main_index">
<$mt:WidgetSet name="メインインデックス"$>
</mt:If><mt:IfArchiveType archive_type="Category">
<$mt:WidgetSet name="カテゴリアーカイブ"$>
</mt:IfArchiveType><mt:IfArchiveType archive_type="Category-Monthly">
<$mt:WidgetSet name="カテゴリ月別アーカイブ"$>
</mt:IfArchiveType><mt:IfArchiveType archive_type="Monthly">
<$mt:WidgetSet name="月別アーカイブ"$>
</mt:IfArchiveType><mt:If name="search_results">
<$mt:WidgetSet name="検索結果"$>
</mt:If>
1月14日修正。↑の方法だとWebページ機能を使ったページとかでサイドバーが表示されなくて,あれこれ考えるのが面倒くさくなってきたので,特定の四つ以外はすべて同じサイドバーを表示するようにしました。MTIFで指定する環境変数は,このあたりを参考に。
<mt:If name="module_category_archives">
<$mt:WidgetSet name="カテゴリアーカイブ"$>
<mt:ElseIf name="module_category-monthly_archives">
<$mt:WidgetSet name="カテゴリ月別アーカイブ"$>
<mt:ElseIf name="datebased_monthly_archive">
<$mt:WidgetSet name="月別アーカイブ"$>
<mt:ElseIf name="search_results">
<$mt:WidgetSet name="検索結果"$>
<mt:Else>
<$mt:WidgetSet name="メインインデックス"$>
</mt:If>
これもかなり泥臭いです(笑。あと,基本的に自分のブログで使うためのものなので,ある程度の前提をもって作っています。簡単に言えば,特定アーカイブが存在しない場合のこと,を考えていない作りなのです。 あまりいないとは思うのですが,もし,これを参考になさる方がおられましたら,そのまま流用すると再構築時にエラーが出る場合があるので注意してください。



まぎらわしくてスミマセン(^^;;
おそらく大半の人が興味ないであろうMTネタですが,
以前に,カスタマイズした内容を忘れて痛い目にあったことがあるので,
自分の備忘録としてどんどん書きます(汗;;
Vistaのサイドバーのことかと思ったのは秘密です
(ってバラしとるがな・・・orz)
独り言。
そういえば,AboutとContactページのサイドバーが消えている……。
……明日治そう(笑
師匠が気が付いた支障は失笑ものですね。
すみません,1箇所,<div>が閉じられてなかったみたいです。
IEとSafariでは問題なかったのですが,どっちもアレなブラウザということで(笑
とりあえず,治ってると思います。
operaでは試してませんが,FireFoxではOKです。
ありがとうございました。
どうでもいいけど個別ページがOpera&FireFox 3だとすげー見難い。
紺地に黒字って何かの嫌がらせか?