Home > Logs > April 2008 > This Entry

NabeAzz 世界のナベアツをプラグイン書きとして表現してみるための (任意の位置でファイルを出力する) PutData プラグイン

元ネタは mixi のコミュニティにあったもの らしくて、どうやら巷では MovableType で世界のナベアツを表現するとか、そこから派生したテクニカルなテンプレート問題を解くことがはやっているらしい(mixi はほとんどやらないし、その他の情報源にしても RSS で見てただけの僕はあまり詳しく知らないのだけれど)。完全に出遅れているので、プラグイン書きとして世界のナベアツを表現するアプローチとして、PutData プラグインを書いてみました。

概要

MTPutData ファンクションタグを追加します。このタグに引数でファイルパスと変数名を渡すと、ファイルにその時点で変数に格納されている値を出力します。テンプレート・タグでループを使ってうまいことやれば、従来のものとは別のアーカイブが作れるかもしれません(でも僕は NabeAzz なテストしかしてません)。

追加されるテンプレートタグ

MTPutData

<$MTPutData name="[変数名]" path="[ファイルパス]"$> の形式でテンプレートに記述します。引数 path に指定したファイルに、その時点で引数 name で指定した変数に格納されている値を出力します。引数 path は必須です。いや、引数 name もないと意味がないですけど

NabeAzz なサンプルテンプレート

ブログが置かれているディレクトリ内に、PutData ディレクトリを作成し、その中に 1.html 〜 30.html を作成します。ページめくりとページ番号つきで、ループ回数が 3 で割り切れる場合または、ループ回数に 3 がつくときにはページ番号の代わりに NabeAzz と入ります。これをインデックステンプレートとして作成すれば、(そのテンプレートの)出力ファイル名として指定したファイルに、ログとしてファイルのパスを保存することができます。


<mt:setvarblock name="file_dir"><$mt:blogsitepath$>PutData/</mt:setvarblock>

<mt:for var="i" from="1" to="30">
    <$mt:setvar name="NabeAzz" value=""$>
    <mt:if name="i" like="3"><$mt:setvar name="NabeAzz" value="1"$></mt:if>
    <mt:if name="i" op="%" value="3" eq="0"><$mt:setvar name="NabeAzz" value="1"$></mt:if>
    <mt:setvarblock name="file_name"><$mt:var name="i"$>.html</mt:setvarblock>
    <mt:setvarblock name="file_path"><$mt:var name="file_dir"$><$mt:var name="file_name"$></mt:setvarblock>
    <$mt:setvar name="prev" value=""$>
    <$mt:setvar name="next" value=""$>
    <mt:unless name="__first__">
        <mt:setvarblock name="prev"><$mt:var name="$file_dir"$><$mt:var name="i" value="1" op="-"$>.html</mt:setvarblock>
    </mt:unless>
    <mt:unless name="__last__">
        <mt:setvarblock name="next"><$mt:var name="$file_dir"$><$mt:var name="i" value="1" op="+"$>.html</mt:setvarblock>
    </mt:unless>
    <mt:setvarblock name="contents">
        <mt:if name="prev"><a href="<$mt:var name="prev"$>">prev</a></mt:if>
         | <mt:if name="NabeAzz">NabeAzz<mt:else><$mt:var name="i"$></mt:if> | 
        <mt:if name="next"><a href="<$mt:var name="next"$>">next</a></mt:if>
    </mt:setvarblock>
    <$mt:var name="file_path"$>
    <$mt:putdata name="contents" path="$file_path"$>
</mt:for>

できあがった NabeAzz なサンプルページはこんな感じ(公開の事情により、ページめくりのリンク先パスを変更しています)。本当はパラパラ漫画を作ろうと思ってこのプラグインを書いたのだけれど、面倒そうなのでやめました。誰か作ってください。

ダウンロード

PutData プラグイン (約 2.1 KB)

注意点

ファイルが存在した場合には上書きしてしまうので、注意して使ってください。あと、WeblogPublisher に出力させていますが、おそらく build_file コールバックは効かないと思います。これが効くようにできればこのプラグインはより有用なものになるでしょうが、そもそもの目的が NabeAzz なプラグインですから(要望があれば取り組んでみますが)。また、へんてこりんなパスを渡すと問答無用で何もしてくれません。

Post Comment




Copyright © okayama, Powered by Movable Type Open Source