はい、みなさんこんにちは。
いつもWordPressのことばっかり書いていますがMovableTypeに触れる機会があったので
備忘録として表題の内容を残しておこうと思います。
今回私がやりたかったことは、以下の通りです。
例に『学生に人気、ジャンル別ランキング』という名目でページを作成します。
前提として、食べ物(項目)は『記事』で投稿されているという前提です。(ウェブページではありません)
例)
《食のカテゴリー(親カテゴリA)》
・和食(子カテゴリ①)
・中華(子カテゴリ②)
・洋食(子カテゴリ③)
《すべての学生(親カテゴリB)》
・小学生に人気No.3(子カテゴリ①)
・高校生に人気No.3(子カテゴリ②)
・大学生に人気No.3(子カテゴリ③)
で、これらを以下のように表示させたい。
【和食(子カテゴリカテゴリA①)】
★小学生に人気No.3(子カテゴリB①)
・[1位] かつ丼
・[2位] チキン南蛮
・[3位] お寿司
★高校生に人気No.3(子カテゴリB②)
・[1位] うどん
・[2位] かつ丼
・[3位] 唐揚げ定食
★大学生に人気No.3(子カテゴリB③)
・[1位] お寿司
・[2位] 焼肉定食
・[3位] チキン南蛮
【中華(子カテゴリカテゴリA②)】
………とこのように続きます。
まず、すでにMTに投稿済みの記事をひぱってきます。
<mt:SubCategories category="食のカテゴリー"> //ここは実際に設定している日本語のカテゴリで問題ない
<mt:CategoryLabel setvar="cat_label_stay">
<div class="eat_wrap">
<mt:SubCategories category="すべての学生"> //ここは実際に設定している日本語のカテゴリで問題ない
<mt:CategoryLabel setvar="cat_label_student"> //変数を格納
<mt:SetVarBlock name="cat_label_double"><mt:Var name="cat_label_eat"> AND <mt:Var name="cat_label_student"></mt:SetVarBlock> //2つの項目の変数を格納
<mt:Entries category="$cat_label_double">
<mt:EntriesHeader>
<div class="eat_box">
<h4 class="eat_t"><mt:CategoryLabel></h4> //子カテゴリB①~子カテゴリB③が表示される
<div class="list">
<ul>
</mt:EntriesHeader>
//ここまではループでまわさないのでheaderタグとして格納
<li>
<a href="<mt:EntryPermalink>">
//ここに中身を表示するソースを記述
</a>
</li>
//ここからはループでまわさないのでfooterタグとして格納
<mt:EntriesFooter>
</ul>
</div>
</div>
</mt:EntriesFooter>
</mt:Entries>
</mt:SubCategories>
</div><!-- .eat_wrap -->
</mt:SubCategories>
上記でひとまずは記事が表示されます。
ただ、上記の状態では、例えば高校生の人気No3の集計が終わっていなくて表示させたくないのに
タイトルのみ表示されてしまう。
該当の記事がないものに関しては表示しないようにしたいのです。
ということで以下の方法を取りました。
<mt:SubCategories category="食のカテゴリー"> //ここは実際に設定している日本語のカテゴリで問題ない
<mt:CategoryLabel setvar="cat_label_stay">
<div class="eat_wrap">
<mt:SubCategories category="すべての学生"> //ここは実際に設定している日本語のカテゴリで問題ない
<mt:CategoryLabel setvar="cat_label_student"> //変数を格納
<mt:SetVarBlock name="cat_label_double"><mt:Var name="cat_label_eat"> AND <mt:Var name="cat_label_student"></mt:SetVarBlock> //2つの項目の変数を格納
<mt:Entries category="$cat_label_double">
<mt:CategoryCount setvar="cat_count"> //ここの記述を追加 cat_countは任意
<mt:If name="cat_count" ne="0"> //ここの記述を追加
<mt:EntriesHeader>
<div class="eat_box">
<h4 class="eat_t"><mt:CategoryLabel></h4> //子カテゴリB①~子カテゴリB③が表示される
<div class="list">
<ul>
</mt:EntriesHeader>
//ここまではループでまわさないのでheaderタグとして格納
<li>
<a href="<mt:EntryPermalink>">
//ここに中身を表示するソースを記述
</a>
</li>
//ここからはループでまわさないのでfooterタグとして格納
<mt:EntriesFooter>
</ul>
</div>
</div>
</mt:EntriesFooter>
</mt:If> //ここに記述を追加
</mt:Entries>
</mt:SubCategories>
</div><!-- .eat_wrap -->
</mt:SubCategories>
こうすることで該当の記事がない場合はカテゴリタイトルが表示されなくなります!
同じようなことWPだとさくっとできるのですが、私自身MTの知識がまだまだなのでこれから勉強しようと思います!
では!