「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
MT::App::Liteを試してみた
@taijuさんが、「MT::App::Lite」というモジュールを公開されました。
RubyのWebアプリケーションフレームワークのSinatraのような書き方で、Movable Typeのフレームワークを生かしたアプリケーションを作れるというものです。
面白そうなので試してみました。
1.MT::App::Liteの概要
Movable Type自体は、シックスアパート謹製のWebアプリケーションフレームワーク(MT::App)をベースに作られています。
ただ、MT::Appはあまり今風とは言えない作りになっています。
MT::App::Liteを使うと、Sinatra風にアプリを作ることができます。
Sinatra風のWebアプリケーションフレームワークは各種のプログラム言語で作られていますので、それらの経験がある方なら分かりやすいと思います。
また、テンプレートエンジンとして、Text::Xslateを使います。
Text::Xslateは日本のPerl界隈では人気があるようです。
2.Perlモジュールのインストール
MT::App::Liteは、以下のPerlモジュールを利用しています。
- Router::Simple::Sinatraish
- Data::Section::Simple
- Text::Xslate
そこで、cpanmコマンドでこれらのモジュールをインストールしておきます。
3.MT::App::Liteのインストール
GithubからMT::App::Liteのコードをダウンロードします。
ダウンロードしたコードの中の「lib」フォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
4.アプリケーションの開発
MT::App::Liteでは、mt.psgiから起動する形でアプリを開発します。
しかし、アクセスされたアドレスと、それに対応する表示の仕方を、Sinatra風に以下のような書き方で記述します。
また、現状のMT::App::Liteでは、ビュー(テンプレート)はプログラムの中の__DATA__セクションに記述するようになっています。
HTTPメソッド アドレス => sub {
表示の処理
};
5.例
例えば、以下のようなアプリを作るとします。
- アプリ名を「MyLiteApp」とします。
- 「http://your-host/path-to-mt/app/」にアクセスしたときに、IDが1番のブログから、すべての記事のタイトルを出力します。
- 「http://your-host/path-to-mt/app/entry/記事のID」にアクセスしたときに、そのIDの記事の記事のタイトルと本文出力します。
この場合、Movable Typeのインストール先の「plugins」ディレクトリに、以下の構造でファイルを配置します。
└ MyLiteAppディレクトリ ├ config.yamlファイル └ libディレクトリ └ MyLiteApp.pmファイル
そして、config.yamlおよびMyLiteApp.pmに、それぞれ以下のように記述します。
config.yaml
name: MyLiteApp
id: myliteapp
applications:
lite_app:
handler: MyLiteApp
script: sub { 'app' }
cgi_path: sub { '/' }
MyLiteApp.pm
package MyLiteApp;
use strict;
use MT::App::Lite;
setup Renderer => 'Xslate';
get '/' => sub {
my $app = shift;
my $blog = MT->model('blog')->load({ blog_id => 1 });
my @entries = MT->model('entry')->load({ blog_id => 1});
$app->render('index.tt', {
blog => $blog,
entries => \@entries,
});
};
get '/entry/:id' => sub {
my $app = shift;
my $blog = MT->model('blog')->load({ blog_id => 1 });
my $entry = MT->model('entry')->load($app->param('id'));
$app->render('entry.tt', {
blog => $blog,
entry => $entry,
id => $app->param('id'),
});
};
1;
__DATA__
@@ index.tt
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title><: $blog.name :></title>
</head>
<body>
<ul>
: for $entries -> $entry {
<li><a href="<: $entry.permalink :>"><: $entry.title :></a></li>
: }
</ul>
</body>
</html>
@@ entry.tt
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title><: $entry.title :> | <: $blog.name :></title>
</head>
<body>
<h1><: $entry.title :></h1>
<div>
<: $entry.text | mark_raw :>
</div>
</body>
</html>
ファイルを配置し終わったら、mt.psgiを起動し、「http://your-host/path-to-mt/app/」や「http://your-host/path-to-mt/app/entry/記事のID」にアクセスして、表示を確認します。
