linkerは「人と人」「人と情報」「人と物」をつなぐデザインユニットです。

ローカルのMTにDynamic MTMLをインストールして動かしてみる

みなさん、こんにちは、まーしーです
ロンドンの暴動はだいぶ落ち着いたようですが、他の街に広がってイギリスの暴動になっているみたいです。
理解に苦しむところもありますが、まずは1日も早く収まってほしいと祈るのみです。

さて、何回かここでもさらっとPowerCMSの話は書いた気がしますが、その機能のひとつに Dynamic MTMLがあります。
静的に生成されるHTMLなどの一部にMTタグを出力しておいてアクセスの度にその内容を構築するといったかんじの機能です。

このDynamic MTML自体はGithubでも公開されています。

alfasado/DynamicMTML - GitHub
https://github.com/alfasado/DynamicMTML

こちらをダウンロードしてローカルのMTにインストールしてみました。

Dynamic MTMLをインストール

インストール方法はダウンロードしたファイルのaddonsフォルダにはいっているDynamicMTML.packフォルダをMTをインストールしたフォルダ直下にあるaddonsフォルダにコピーすれば完了です。

あとはドキュメントにあるように設定画面で「DynamicMTMLを有効にする」にチェックをいれます。

ドキュメントには

ブログのサイト・パス直下に.htaccess, .mtview.phpを生成します。 mtディレクトリ直下にpowercms_filesディレクトリを作成し、MTから書き込み可能なパーミッションを設定してください。

と書いてあるのですが、有効にするチェックをいれたらこれらは出来ていました。
.htaccessも生成されるので、もともと.htaccessを用意してある場合などは注意が必要です。

ということでここまでいったらインストールも基本設定も完了。
早速 Dynamic MTML を試してみます。

Dynamic MTMLを試してみる

Githubで公開されているドキュメントに「権限があるときには編集タグを表示させる」サンプルコードがあるのでこれを試してみましょう。
ソースはこんなかんじです。

<mt:dynamicmtml>
<mt:IfUserHasPermission permission="edit_all_posts">
    <$mt:setvar name="can_post" value="1"$>
<mt:Else>
    <mt:IfUserHasPermission permission="publish_post">
        <$mt:entryAuthorId setvar="entry_author_id"$>
        <$mt:AuthorId setvar="client_author_id"$>
        <mt:if name="entry_author_id" eq="client_author_id">
           <$mt:setvar name="can_post" value="1"$> 
        </mt:if>
    </mt:IfUserHasPermission>
</mt:Else>
</mt:IfUserHasPermission>
<mt:if name="can_post">
    <p>
        <a href="<$mt:CGIPath$><$mt:AdminScript$>?__mode=view&amp;_type=entry&amp;id=<$mt:entryid$>&amp;blog_id=<$mt:blogid$>">編集
        </a>
    </p>
</mt:if>
</mt:dynamicmtml>

権限の判定はどうやっているのかちょっとわからないのですが、インデックステンプレートに書いたからか書き方がまずかったのか権限があるときと権限がないときでかわらなかったので、ログインしているかどうか感じで書き換えてみました。
(多分、これも後述するMTentriesの中に書いたのが原因かもしれません)

インデックステンプレートのMTEntriesのループ内に上記のコードを埋め込んでいますが、htmlに出力されている時はコンテキストがないかと思うので、Blogidなどは置き換わるのですがEntryidが置き換わりませんでした。
これをどうやってやるのがいいんだろうとか考えていて変数で渡す方法にしてみました。

MTMLタグのtagパラメータに生成したファイルに表示させたいMTタグを指定して、paramsでそのときにあわせて使うモディファイア類を指定出来ます。(日本語が分かりにくいですね・・)
ということでこんなかんじで、変数にセットするところとかを書いておきました。

<MTML tag="MTSetVarBlock" params='name="editlinkurl"'><$mt:CGIPath$><$mt:AdminScript$>?__mode=view&amp;_type=entry&amp;id=<$mt:entryid$>&amp;blog_id=<$mt:blogid$><MTML tag="/MTSetVarBlock">

これらの修正をいれてDynamic MTMLに関するところはこのような感じになりました。

<MTML tag="MTSetVarBlock" params='name="editlinkurl"'><$mt:CGIPath$><$mt:AdminScript$>?__mode=view&amp;_type=entry&amp;id=<$mt:entryid$>&amp;blog_id=<$mt:blogid$><MTML tag="/MTSetVarBlock">
<mt:dynamicmtml>
<mt:IfLogin>
    <$mt:setvar name="can_post" value="1"$>
</mt:IfLogin>
<mt:if name="can_post">
    <p>
        <a href="<$MTGetVar name='editlinkurl'$>">編集</a>
    </p>
</mt:if>
</mt:dynamicmtml>

ここから生成されたHTMLはこのような感じになっています。

<MTSetVarBlock name="editlinkurl">http://local.mttest/mt/mt.cgi?__mode=view&amp;_type=entry&amp;id=1517&amp;blog_id=2</MTSetVarBlock>
<MTDynamicMTML>
<mt:IfLogin>
    <$mt:setvar name="can_post" value="1"$>
</mt:IfLogin>
<mt:if name="can_post">
    <p>
        <a href="<$MTGetVar name='editlinkurl'$>">編集</a>
    </p>
</mt:if>
</MTDynamicMTML>

MTタグが表示されている状態になっていますが、このHTMLにアクセスしたときにMT部分が書き出されます。

静的なHTMLファイルにアクセスしていますが、ログインしている時はこのようなかんじで編集画面へのリンクが表示されています。

110811-01.jpg

ログインしていないときは当然このようなかんじでリンクが表示されていません。

110811-02.jpg

MTViewでの判定を挟んでいるので、状況に応じて表示が切り替わっていますね。

ということで

Githubに載っているDynamic MTMLのドキュメントをみただけでもかなり設定出来る内容がありそうです。
MTタグやphpとの関係でのオプションやDynamic MTML自体を拡張?する話等々があるみたいです。

全てを使いこなすのはなかなか大変そうですが、Dynamic MTMLを使う事でかなり出来る事が増えそうな気もします。

MTのダイナミックパブリッシングでできそうなこともかなりありそうな気がしていますが、このDynamic MTMLも使っていきたいと思います。
Githubにて公開されているので一度使ってみてはいかがでしょう。


インストール時にはまったメモ

大したことじゃないですが、インストールしたときに一人はまったメモも。

addonsフォルダにDynamicMTML.packフォルダをもっていってさて、設定にチェック入れようかとおもったら、不正な操作です的に怒られてしまってローカルの設定の問題なのかなのか、とか色々調べたりしてみるもよく分からず。
mt.cgiにアクセスしなおしたらDBのアップグレードが走って無事解決、というかんじでした。

DBのアップグレードがあるときは大体リダイレクトされていたような気がするのですが、この時はされなかったので、ローカルの設定か何かがちょっと間違ってるのかもしれないですね。