「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」にアクセスして、表示を確認します。