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での書き方を追記

 

トラックバックURL

トラックバックされる際にはこの記事へのリンクをお願い致します

トラックバックの一覧

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

コメント

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

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

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

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

コメントを投稿

 


 <注意>
 ご利用のブラウザ、設定ではコメントのプレビューおよび投稿はご利用になれません。
 コメント投稿の際はお手数ですがjavascriptをオンにして下さい。
 *javascriptオフのまま投稿ボタンを押すと送信内容が消えますのでご注意下さい。