MovableTypeを開発プラットフォームとして使う。

| コメント(0) | トラックバック(3)

MovableTypeをデフォルトの状態で運用する時にパスが /mt/mt.cgi になるわけだが、/mtフォルダにBasic認証で制限をかけたいとか、もはやMTをブログツールでなくWebアプリの開発プラットフォームとして使いたい、といった場合に役立つノウハウ。

実際問題、ちょっとしたWebアプリやコミュニティサイトなんかすごく簡単にできる。

/mt/mt-config.cgi

CookiePath /

例えば/mtディレクトリ以外のディレクトリでもログインの有無を確認して処理を変えたい場合、mt-config.cgiにこのように書く。
但し、コメントなんかにスクリプト付きのリンクとか埋め込まれたとして踏んだときのリスクはあるので(今回はいわゆる「ビジネスブログ」ということで、そのあたりの機能はオフにする、あるいは考えない前提で)。

/myapp.cgi

#!/usr/bin/perl -w

use strict;
use lib qw (/home/site_path/htdocs/mt/lib/);
use lib qw (/home/site_path/htdocs/mt/extlib/);
use MT::Bootstrap App => 'Myapp';

これがCGIの本体。こいつに対して実行パーミッションを持たせる。

/mt/lib/Myapp.pm

こいつが今回の主役。ログインもログアウトも /mt/mt.cgi を経由せずに行えるし、もはや何でもできるというか、すごく楽に開発できる。MTって、僕にとってはもはやブログではなく「開発プラットフォーム」である。

MT::Objectのサブクラスを作成すれば、SQL要らずでデータベース連動のWebアプリが出来る。動作の重さもFastCGIを使うことで解消されるし、いざとなったら 「MovableType Background Rebuilder Plugin」ってのもある。

package Myapp;
use strict;

use MT::App;
@Myapp::ISA = qw(MT::App);

$ENV{MT_HOME}="/home/site_path/htdocs/mt";
$ENV{MT_CONFIG}="/home/site_path/htdocs/mt/mt-config.cgi";

sub init_request {
	my $app = shift;
	$app->SUPER::init_request(@_);
	$app->add_methods( Myapp => \&_Myapp );
	$app->{default_mode} = 'Unprotected';
	$app->add_methods( Unprotected => \&_Unprotected );
	$app->{requires_login} = 1 unless $app->mode eq 'Unprotected';
	$app;
}

sub _Unprotected {
	my $app = shift;
	my $query = $app->param;
	my $action = $query->param('action');
	my $redirect_pth = $query->param('redirect_pth');
	if ($action eq 'logout') {
		# /myapp.cgi?action=logout でログアウト
		$app->logout;
		# ログイン用フォームを表示
		return &_login_tmplate;
	}
	my $login = $app->login;
	if (defined $login) {
		if (($redirect_pth ne '') && ($redirect_pth ne '/myapp.cgi?action=logout')) {
			$app->redirect($redirect_pth);
		}
		# ログインしていたら_Myappを実行
		return &_Myapp($app);
	}
	if ($app->login) {
		# ユーザー名とパスワードが正しければログイン
		$app->run;
	}
	# ログイン用フォームを表示
	return &_login_tmplate;
}

sub _Myapp {
	my $app = shift;
	# 本来はログインユーザーが /myapp.cgi?__mode=Myapp&...という
	# アドレスでアクセスした時の処理。この場合は、ログインユーザー
	# だった場合の処理を書く。
}

sub _login_tmplate {
	return <<HTML;
# ログイン用フォームのHTML
HTML
}
1;

トラックバック(3)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/414

MovableTypeを開発プラットフォームとして使う。 (Junnama Online (Mirror)) (tags: MovableT... 続きを読む

MovableType をテンプレートエンジンとして使って動的なページを作成する方法の例。 以下のエントリーの例で説明。※エラー処理等は省略。 ... 続きを読む

対WordPress? WordPressのシェアがどうだからというのは本質では... 続きを読む

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2007年3月 8日 03:19に書いたブログ記事です。

ひとつ前のブログ記事は「Web2.0でもITベンチャーでも何でもいいけどさ、もう少しレベル上げろよ(3)。」です。

次のブログ記事は「MT plugin Jaccessibility (書き直し版のさらに微修正!).」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6