ダイナミック・パブリッシング下で readfile と同じことする in smarty

までずっと考えて悩んでいた点がひとつ解消しました。
というのは、ダイナミック・パブリッシング化した日付アーカイブにおいて、スタティックに生成している EntryBody 部のファイルが読み込めなかったこと。
別に表示させないならさせないでも良いのですが、静的に出力した場合とダイナミックの場合での動作の差異を見るには、これが自分にとって不可欠だったので。

「Smarty使えば良いよ」というアドバイスを受けてたのですが、これがまたどうにも出来なくてつっかかっていたのでした。

先ずは何をどうしたいのか?

以前のエントリーで、EntryBody部だけをスタティックに出力しておけば、その部分を色んなアーカイブで使い回せる紹介をしました。
ダイナミック・パブリッシングで改行処理プラグインを有効に使えるよう頑張ってみる-でもダメな件

で、やりたかった事・出来なかった事は、
静的に出力させているエントリー・アーカイブでは、その「EntryBody部」を読み込ませる事は出来たけど、ダイナミック化した日付アーカイブでは、その「EntryBody部」を読み込ませる事が出来なかった事。
このサイトそのままの例を挙げてみます。

エントリー・アーカイブ・・・静的出力

<?php readfile ("<$MTBlogSitePath$>archives/<$MTArchiveDate format="%Y/%m/%d%H%M%S"$>_body.php"); ?>

そして、これと同様の記述を行っても、ダイナミック化した日付アーカイブでは読み込む事が出来ませんでした。
日付アーカイブのフォーマットが、記述した通りには出力されないみたいで。
なので、アドバイスを貰っていた Smarty の出番となります。
しかし私はこれがほんとにさっぱりダメで。。。(。。|||)
でも諦めずにちまちまとやってて、ようやく読み込む事が出来ました。

PHPのreadfile関数と似た動きをする fetch file

参考にさせて貰ったのはこちらです。
WingMemo: smartyでダイナミック頁にMT変数を読み込む [WingMemo]

  • {{capture name="mtname"}}<$MTの変数タグ$>{{/capture}}・・・MTタグを定義する
  • `$smarty.capture.mtname`・・・定義したものを表示させる
  • {{fetch file="ファイルまでのURL"}}・・・ファイルを読み込む

※mtname の部分は自由な言葉に出来ます。

上記を用いて、先ずは動かないMTタグを動くように定義付けます。
エントリーアーカイブの記述に沿うなら、必要な定義付けは MTBlogSitePath と 日付フォーマット の2点。

  • {{capture name="mtsitepath"}}<$MTBlogSitePath$>{{/capture}}
  • {{capture name="mtentrybodypath"}}<$MTArchiveDate format="%Y/%m/%d%H%M%S"$>{{/capture}}

これで、2つのMTタグが定義されました。
そしたら表示させるための Smartyタグ を用いて、エントリー・アーカイブと同様の記述を行ってみます。

{{capture name="mtsitepath"}}<$MTBlogSitePath$>{{/capture}}
{{capture name="mtentrybodypath"}}<$MTArchiveDate format="%Y/%m/%d%H%M%S"$>{{/capture}}
{{fetch file="`$smarty.capture.mtsitepath`archives/`$smarty.capture.mtentrybodypath`_body.php"}}

ちょっと読み辛い記述ではありますが、readfile を fetch file に置き換えて、MTタグの部分を Smarty記述にしてあります。

これで、ダイナミック・パブリッシングしている日付アーカイブでも、日付フォーマットがきちんと動作して EntryBody部までのパス指定が通って、ファイルを読み込む事が出来ました。

・・・(´・ω・)=3

あとがき

定義付ける・表示させる・読み込ませる という3点が、自分の中でまったく整理が出来なくてほんと弱っちゃってました。
TAEKOさんのところではとても判り易く解説されてあるというのに。
その"判り易さ"すら、今だからこそ「判り易い」と言えるのですが。
ほんともうなんていうか・・・自分に疲れます。

しかし、これでMT変数タグを定義付けしたら使えるようになります、って点がちょびっと判ったので、他のところにも使えたりするの・・・かな?
プラグインのタグとかね。なんか弄るとこあるかな・・・あったらちょっとやってみよかな。

あ、あとXSAS上で、
<?php readfile ("<$MTBlogURL$>parts/なんかのファイル.php"); ?>
は使えないけれども、
<?php readfile ("<$MTBlogSitePath$>parts/なんかのファイル.php"); ?>
は使う事が出来ますね。
個人的にこれに気付いたのがちょとヨカタです。

サーバーのこと、ちゃんと判ってないとダメですね。。。フゥ

[参考サイト]
WingMemo: smartyでダイナミック頁にMT変数を読み込む [WingMemo]

2007/03/14 22:51:03 追記:
コメント欄にて、oscarさんから更にとても良いアドバイスを受けました。
Smartyで定義する際、ひとつの定義でひとつのMTタグを定義するという決まりはなく、MTタグを複数繋げた文章状態としても定義付けする事出来る、との事です。
なので、私の場合は今回の例で「ひとつの定義=ひとつのMTタグ」としているのですが、こうしなくても良くって、より簡単に定義付けする事が出来ます。
コメント欄も読む事を推奨します。読んで下さい_(..)_

▲ to Top

コメント(2)

試行錯誤、ご苦労様!
私のやり方を、説明しますね。もうちょっと見やすくなるかな?

{{capture assign="mtentrypass"}}<$MTBlogSitePath$>archives/<$MTArchiveDate format="%Y/%m/%d%H%M%S"$>_body.php{{/capture}}
<$MTInclude file="$mtentrypass"$>

Smarty部分、ちゃんと表示されるかな?
どうせキャプチャするなら、まとめてやった方が見やすいです。キャプチャに assign 使うと、$変数名で指定できます。
それで、読み込みはMTIncludeでも大丈夫ですよ。

>>oscar さん
すごい!なるほどですね!ひとつの定義でひとつのMTタグを定義するって決まりはなくって、好きなように定義する事が出来るんですね。
とても参考になりますほんと!ありがとうございます_(..)_


MTInclude はその動作が”構築される”と思い込んでたのですが、ちょっと違うみたいですね。。。
こういうの憶えていくとダイナミック・パブリッシングも楽しくなりますね。

トラックバック(0)

▲ to Top