MODxではドキュメントと言う形でhtmlやcssを管理できるんだけど、ここで画像も一緒に管理してみようと言うテスト。
(もうどこかの誰かが実際にやってるとは思うんだけど…)
まずは管理画面の「ツール」→「MODxの設定」にてカスタムコンテントタイプを追加する。画像なので「image/png」や「image/jpeg」を適当に追加して保存。
画像はバイナリだとドキュメントとして保存できないので、BASE64エンコーディングしてテキスト化する。そのテキスト化したものをドキュメントとしてMODxに登録。
その際、テンプレートは「(blank)」を選び、コンテンツタイプは画像に合わせ「image/png」等を指定する。
で、このBASE64エンコーディングを行ったドキュメントをそのまま表示しても画像は表示されないので、どこかでデコードする必要がある。それをプラグインで実現。
適当な名前でプラグインを作成し、システムイベントでは「OnWebPagePrerender」をチェック。内容は以下を記述。
if(! (strpos($modx->contentTypes[$modx->documentIdentifier],'image') === false) ){
$modx->documentOutput=base64_decode($modx->documentOutput);
}
これで表示するドキュメントのコンテンツタイプが画像だった場合に、デコードしてくれる。
というわけで実際にMODxにドキュメントとして保存されている画像がこれです。
ちなみにドキュメントでは次のようにテキストとなって登録されています。
iVBORw0KGgoAAAANSUhEUgAAAHYAAABKC
…略…
H0RU5/HfkPyRdlHcHXYAAAAASUVORK5CYII=
利点と欠点かはこんな感じかな。
- mysqlのバックアップに画像を含めすべてのコンテンツが含まれるのでバックアップが楽かも。
- Slimstat等のアクセス解析で画像にアクセスしたログも残る。
- 画像もアクセス制御が可能。結構便利かも。
- 画像に限らずPDFやOfficeファイルでもOK。
- 普通に画像を表示するのに比べ、かなりマシンパワーを必要とする。
- 画像の登録が面倒。
- データはmediumtextで保存されるので、サイズの大きなデータは保存できない。せいぜい1M程度?(longtextに変更できれば100Mオーバーいけそうな感じ。未確認だけど。)
登録が面倒なのは画像を自動的にBASE64エンコーディングして登録してくれるモジュールとかが用意できればカバーできるかな(誰か作らないかな…)。
会員専用のページで画像も他の人に見せたくないってサイトを作る人にはお勧めかもしれない。
あと、画像のURLがhtmlになってしまうけど、いやならばapacheやlighttpdならばmod_rewriteでなんとかなるでしょう。
あ、それとMODx用の
trackbackセットを微妙に更新しました。主な変更として指定した日数を過ぎるとトラックバックを受け付けなくなる仕組みを実装。
うちのサイトではとりあえず公開して60日を過ぎた日記に関してはトラックバックを受け付けないように設定してみた。今のところ動いてるっぽいのかな。
作成日:2007/05/21 00:35:23