top

smartyでダイナミック頁にMT変数を読み込む

smartyでダイナミック頁にMTタグの変数を取り込んでみます。今回試してみたのは以下のコードです。

{{fetch file="http://ファイルのアドレス"}}
これはphpのincludeと同じ働きをするsmartyのコードです。このコードを使えば<? include("ファイルのアドレス"); ?>を使わなくてもダイナミック頁に他のファイルを読み込むことが出来ます。

{{capture name="mtname"}}<$MTの変数タグ$>{{/capture}}
`$smarty.capture.mtname`

これでMTの変数タグを取り込むことが出来ます。上で取り込むMTタグを指定して、下のコードを表示させたいところに組み込みます。赤字の部分は好きな名前で。

■応用例~月別アーカイブに静的生成で作った<$MTArchiveCount$>を読み込む
ちょうどと言ってはなんですが、MT3.31にはダイナミックの月別アーカイブで<$MTArchiveCount$>が正しく表示されない(0になってしまう)バグがあるので、これを静的生成頁から読み込むことで解消してみます。

以下は月別アーカイブの頁分割への応用例です。

1.下準備
「設定」→「公開の設定」→「公開」の中の「再構築オプション」の確認をします。もし、「アーカイブのみダイナミック・パブリッシングで出力します」になっていたら、「テンプレート別に、スタティックHTMLもしくはダイナミック・パブリッシングを選択します」を選んでチェックしておきます。

2.静的生成用の月別アーカイブを作成する
「テンプレート」→「アーカイブ」と進み、「テンプレートを新規作成」で以下のソースを記入、テンプレート名「月別アーカイブ数字」で保存する。
「このテンプレートをダイナミック・ページにする」のチェックは外しておくこと。

<$MTArchiveCount$>

3.アーカイブマッピングで月別アーカイブのURLを決定しておく
「設定」→「公開の設定」→「アーカイブ・マッピング」で「マッピングを新規作成」をクリックします。

 アーカイブの種類:月別
 テンプレート:月別アーカイブ数字

にして、追加をクリック。ここでは出力フォーマットは以下のようにしました。

 sample/c<$MTArchiveDate format="%Y_%m"$>.html

これでsampleディレクトリー内にc2005_12.htmlなどという名前でその月のエントリー数のファイルが生成されるようになります。

4.頁分割のコードを以下のように修正する

{{capture assign="count"}}<$MTArchiveCount$>{{/capture}}

        ↓

{{capture name="mtname"}}<$MTArchiveDate format="%Y_%m"$>{{/capture}}
{{capture assign="count"}}{{fetch file="http://ブログURL/sample/c`$smarty.capture.mtname`.html"}}{{/capture}}

アドレスなどは各自の設定に合わせて下さい。これで月別アーカイブも3.31で問題なくダイナミック頁分割できます。
バグが直った後も覚えておけばいろいろ応用できると思います。例えば静的生成で作った各月のカレンダーを動的頁に読み込むことも出来ますし。

 

トラックバックの一覧

トラックバック ダイナミックパブリッシングでクエリー付URLをインクルードする  »» 2007年11月28日 15:47
 MovableTypeのダイナミックパブリッシングでは、スタティック同様、MT...