« DB | メイン | PHP »

2009年1月20日

効率的にMTのテンプレートコーディングを行う

ランチブログ:偏食偏在はいつもの通りMTで構築したのですが、ビュー部分のコーディングでは、こちらの便利なプラグインを利用しました。

MTのテンプレート開発で再構築を不要にするfastDevelopmentプラグイン:to-R

MTのテンプレートコーディングで何が嫌かと言えば、あのもっさりとした管理画面です。特にバージョン4になって酷くなりました。しかも特定の箇所を継続して修正したい際、変更ボタン押下後に画面が再描画されるため、テキストフィールドのカーソルを再度該当する箇所に合わせる必要があります。これでは全く「コーディング→確認」のリズムがつかめません。

管理画面を回避する方法としては、ファイルリンクを利用して外部エディタで編集する方法がありますが、ファイルが更新されたことをMTが検知する必要があるため、確認のたびに再構築作業が必要です(ダイナミックパブリッシングの場合は管理画面上での何らかの操作でOK?)。

こちらのプラグインは、ダイナミックパブリッシング利用下において、ファイルシステムのテンプレートファイルの変更を、すぐに画面に反映・確認できるようにするものです。仕組みとしてはブートストラッパー(mtview.php)の処理をフックして、表示毎に古いテンプレートのキャッシュを破棄することにより、毎回新しい内容をファイルからロードして解釈(MT→Smarty→PHP[→キャッシュ])させ、実行・表示させているのかと思います。ていうか、こんなフックができるなんて知りませんでした。素晴らしい。

とは言え、わざわざローカルで編集したファイルをSFTPでチマチマとアップロードする作業もアホくさいので、Eclipseで編集+アップロード→という流れか、ssfhsでサーバをマウントしてしまい、エディタで編集+直接保存という流れがメインになりそうです。

さてさて、特にカスタムフィードの普及以降、MTはブログツールではなくCMSであるという考えがようやく認知されはじめ、SixApartのwebでも事例として紹介されていますが、最近の個人的にはもう少しプリミティブな機能で見ており、「MT = 標準的に設計されたDBスキーマ + カスタマイズ可能な管理画面セット + インターフェイス(Atom or XML-RPC)」である、という認識を持ちながらいろいろと活用を考えています。そんな話はまた追々。

2008年6月30日

カスタマイズ可能なSNS/CGM/CMSパッケージが5万円から

これ、SNS/CGMパッケージ持っている所には、結構痛い話なんじゃないかなぁ。

SixApart : シックス・アパートが、Movable Typeにコミュニティ・ソリューションを無償でバンドル
コミュニティ・ソリューション ドキュメント

要するにCMSだけではなく、SNS/CGMパッケージも5万円から手に入るということ。しかもカスタマイズ簡単。既存のオープンソースのパッケージをカスタマイズするより、遙かに安い工数でコミュニティサイトができちゃいそう(登録ユーザ数とライセンスユーザ数は同じなのか、という疑問は残るものの)。

今までパッケージを持てなかったWeb屋さんにとっては、提案できる武器が増えるという意味でいい話だと思う。今更SNS案件があるかどうかは別として、頭を使えばいろんなことができそう。

---
2008年8月4日追記

SixApart : Movable Type 4.2 リリース延期のお知らせ によれば、ユーザの他にプロフィールという概念を導入するようですね。

2008年1月 8日

エントリーに画像を挿入すると回り込みになる

MT4でエントリーに画像を挿入する際に、配置する位置を選ぶことができるのですが、右か左を選ぶと回り込み(float)になってしまい、単純1段落に1画像だけ置きたい場合、意図しない結果になってしまうことがあります。

特にWYSIWIGエディタを使わない場合が面倒で、画像の後にstyle="clear: both;"のようなタグを入れなければ、回り込みを解除できません。

一体どうなっているものかと仕組みについて調べてみると、まず画像を挿入するとimgタグがformで括られます。その理由は下記のサイトを参照。

The blog of H.Fujimoto:画像を挿入したときにformタグがつく理由

formはspanに置換され、imgタグのstyle属性で左右中央の位置が決められるようです。該当部分のソースを見てみると、MT/lib/MT/Asset/Image.pmにおいて

左位置



float: left;
margin: 0 20px 20px 0;

右位置



float: right;
margin: 0 0 20px 20px;

中央位置ならば



text-align: center;
display: block;
margin: 0 auto 20px;

というある意味微妙な実装になっています。おまけに勝手にマージンが決められているのも勘弁して欲しいですね。本来ならば、位置選択の段階でfloatにするかブロック要素にするのか選ばせてもらいたいものです。

左位置(ブロック)



display: block;

右位置(ブロック)



display: block;
text-align: left;
margin-left: auto;
margin-right:0;

という感じでしょうか。

がんばってこの部分のコードを書き換えてもいいのですが、推奨されない方法です。が、このためにプラグインを書くのも面倒な話です。MTはこういう決め打ち的なコードが多いですよね。