top

親カテゴリーに子カテゴリーの記事を表示させる

質問をいただいたので、それに関連することで「ダイナミック・パブリッシングで親カテゴリーに子カテゴリーの記事を表示させる方法」について書いておこうと思います。

通常、カテゴリーにはそのカテゴリーの記事しか表示されません。が、<MTEntries>を<MTEntriesWithSubCategories>というタグに変えることで子カテゴリーの記事も一緒に表示されるようになります。
ところでこのタグ、静的生成では<MTEntriesWithSubCategories>のみで動作しますが、ダイナミックだと アトリビュートcategory="category_name"を併用しないと上手く動かないようですね(これもバグの一種かな?)。静的生成と同じ動きをさせるためには<MTIfCategory>を使って1つ1つ指定していってもいいのですが、カテゴリーの数が多い場合は面倒ですので、Smartyを使うのが手っ取り早いです。(追記:MT4ではこのバグは修正されました)

■全てのカテゴリーで親カテゴリに子カテゴリの記事も表示させる

<MTEntries>~</MTEntries>を以下のように<MTEntriesWithSubCategories>~</MTEntriesWithSubCategories>で置き換えます。

●4.0の場合

<MTEntriesWithSubCategories>
    …
</MTEntriesWithSubCategories>

●3.35以前の場合
MT3.35以前にはアトリビュートcategory="category_name"を指定しないと上手く動作しないバグがありますが、以下のようにSmartyを使うことで回避できます。

{{capture name="subcat"}}<$MTCategoryLabel$>{{/capture}}
<MTEntriesWithSubCategories category="`$smarty.capture.subcat`">
    …
</MTEntriesWithSubCategories>

赤字の部分はなんでもいいですが、2箇所とも同じ文字にしておく必要があります。

■特定の親カテゴリーにのみ子カテゴリの記事を表示させる

子カテゴリを表示させたい親カテゴリが1つだけ、あるいは全部でも2~3個しかない場合はMTタグで以下のように記述することもできます。

<MTIfCategory name="子カテゴリを表示させたいカテゴリー名">
<MTEntriesWithSubCategories category="子カテゴリを表示させたいカテゴリー名">
    …
</MTEntriesWithSubCategories>
<MTElse>
<MTEntries>
    …
</MTEntries>
</MTElse>
</MTIfCategory>

<MTElse>で条件分枝を増やしていく方法はこちらを参照。

<2007.2.5 追記>capture assignによる書き方を追記。
<2007.8.2 修正&追記>
・MT4ではcapture assignを使う方法が使えないのでcapture nameを使う方法のみに統一
・バグが修正されたMT4での書き方を追記

 

トラックバックの一覧

トラックバック 子カテゴリのエントリーを含むアーカイブ(ダイナミックパブリッシング暫定版)  »» 2007年2月 5日 15:47
ダイナミックパブリッシングで、子カテゴリーのエントリーを含むカテゴリーアーカイブを、ページ分割する方法。(力任せの暫定版)

コメント

category="`$smarty.capture.subcat`"の部分、私はcategory="$subcat"と書いてますが、それでも大丈夫ですね。
いろいろ書き方があるみたいで、未だに試行錯誤中です。

親カテゴリーの件、解決されたようで何よりです。

>category="$subcat"
あ、なるほど!
capture nameじゃなくてcapture assignを使えば変数部分も単純に$subcatだけでいけますね! その方が記述も簡単になるし直感的にも分かりやすいですね。これからはそちらでいこうと思います。

私も試行錯誤中なので情報は多い方がありがたいです。oscarさんがいろいろやって下さっているのでとても助かります。