home>>PHP FW Kohanaを使う>>アプリケーションを作る

アプリケーションを作る

MovableTypeがともだちになったの巻

MovableTypeにふりまわされるの巻から一夜、頭を冷やしたら出来た。なにを複雑なことを考えていたのか、と反省

MTをKohanaのindex.phpと同じところにインストールする

Kohana側のindex.phpと同じところにMTを入れる。もちろんapache のaliasを使ったり、MT側のディレクトリ設定をいじれば別のところに入れることは出来るが、HTTPの大元の設定やMTは素のままで使いたいので、あえて同一ディレクトリに入れる。

ディレクトリの構造


HTTPのDocumentROOT /index.php<=kohanaのindex.php
同上               /mt-cgi-path <=MTのCGIパス
同上               /mt-static <=MTの共通静的ファイル
同上               /ブログディレクトリ(静的ファイル)/

もちろん、'Kohana'というフレームワークにあるように、.htaccessの設定が<ファイルが存在すればindex.phpに情報を渡さず直接ファイルアクセスする>という風になっているので、このままだと/ブログディレクトリ(静的ファイル)/にあるファイルがそのまま送信されてしまう。

そこで、ブログディレクトリにかんしては、直接アクセスを禁止してKohana経由で処理できるように、次のように.htaccessとシンボリックリンクをいじる。

.htaccess修正。MTの静的ディレクトリへの直接アクセスを禁止する

.htaccessのRewriteCondを、下のように設定し直す[1]

標準添付の.htaccessの修正

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

#下の二行を付加する
RewriteCond %{REQUEST_FILENAME} ブログのフルパス
RewriteRule .* index.php/$0 [PT,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT,L]

シンボリックリンク:MTの静的ファイルパスをkohana文書パスにリンク

---


cd Kohanaの文書ディレクトリルート
ln -s MTの静的ファイルパス .

これでKohanaモジュールは、シンボリックリンクにあるMTのブログファイルを文書として読み込む。

routes.phpでMT静的パス用のルーティングを加える

簡易タグのパースだけ出来ればいいので、Controller内でパース直後にprintする。Viewは単にechoしているだけ。

routes.phpの設定と、コントローラーのメソッド


---rotes.php
$config['MTのブログディレクトリ'] = 'page/rawhtml';
$config['MTのブログディレクトリ/(.*)'] = 'page/rawhtml';

---Controllerのrawhtmlメソッド

 public function rawhtml()
 {
  $content = $this->model->get_content();<=MTのファイルを取ってきて
  $parser = new TagParser($this->model);<=独自タグをパースして
  $parser->set_content($content);
  $result = $parser->parse();
  $template = new View(site::$info['skin'].'rawhtml');<=Viewに渡す
  $template->content = $result;
  $template->render(TRUE);
  exit;
 }

これで、BLOGサイトのような処理が可能となった。














annex

補足情報はありません













note
[1] 実はまだ、RewriteCondの書式がよくわかってないのです。 PATH_INFOで条件をつけるのが便利だと思って、試したけどだめで(ログも見てない、手抜き試しですが)、 ネット上で用例がある REQUEST_FILENAME を安直に採用しました。 ただし、小関さんのおはなしでは( mod_rewriteの考え方 ) 同変数の内容がシステムのフルパスをあらわさないこともある、 とのことで、たしかに、同頁にポインタがあるapacheのBUGトラックでも 未解決のようです。 一応、とりあえず私がためした条件では、フルパスでOKでしたので、これを当面採用します。