HOME>WEBプログラム覚書>[PHP]ビューとレイアウトを分けるワケ

[PHP]ビューとレイアウトを分けるワケ

WordPressとかMovableTypeは使ってるけどCakePHPは使ったこと無い人。 たぶんデザイナーさんとかにビューとレイアウトを分けるとイイコトあるよと伝えたい。

ビューとレイアウト

言い換えるとコンテンツとフレームってところでしょうか。

まぁこんな感じ。

仕組み的なもの

WordPressとかMovableTypeは基本的に各種テンプレートから パーツを呼び出す仕組みになっています。

ホーム用のテンプレート、エントリーページ用のテンプレート、アーカイブ用のテンプレートから ヘッダ、フッダ、ナビゲーションバーを読み込んでる場合が多いと思います。

一方CakePHPではレイアウトがコンテンツを呼び出すのです。

まぁレイアウトがコンテンツを呼び出すというのは方便と言われればそうかもしれません。 真意が必ずしも伝わってないようなので釈明すると、フレームワークがコンテンツをレンダリング。 レンダリング結果とレイアウトを結合させるって感じです。

レイアウトが呼び出すってのはイメージで実際はフレームワークが呼び出すってことです。

ビューとレイアウトを分けるメリット

レイアウトの変更が簡単にできる

レイアウトの変更が簡単とは、すなわちデザインの変更が簡単ということです。

スマートフォン向けのページ、印刷用のページなどを作りたい場合、 WordPressやMovableTypeでは各パーツに条件分岐を書かなければならず、 ただでさえPHPタグやMTタグで見難いファイルが更に見難いものとなります。

もちろんWordPressとかMovableTypeでも条件によって読み込むファイルを切り替えてくれる プラグインがあるでしょう。たぶん。でもプラグインの中身がわかってないとエラーに対応できなかったり、 本体バージョンアップ時に使えなくなったり、余分な機能付きで重かったりということが多々あります。

CakePHPの場合、

AppController.php

  1. <?php
  2. if ($client === 'smartphone') {
  3.     $this->layout = 'smartphone';
  4. }
  5. ?>

という感じで書いて、スマートフォン用のレイアウト作るだけです。 (実際はテーマを変更する場合が多いと思います。) スマートフォン用のURL作る必要もありません。

このブログの場合、スマートフォンからのアクセスとデバック用にclient=smartphoneのパラメータ付きでアクセスした場合、 スマートフォン用デバックページを表示するようにしています。 ビューとレイアウトを分けるとこういうことが簡単に出来るのです。

その他にも2つのページをくっつけたり、コンテンツだけを出力して外部サイトから取得できるようにするとか コンテンツをかなり柔軟にコントロールすることが可能となります。

もうコレだけで、ウェブアプリケーションを作らない人でも CakePHPを学んでおいて損はないと思います。

今週の土日はコレで決まりですね。

※ホントにウェブアプリケーション作らないって人は 同じような仕組みでもっと軽量のがあるはずなのでそれを使ったほうが良いと思いますが 残念ながら僕はCakePHPしか使ったこと無いので紹介はできません。

とはいえインターフェイスが無い

とはいえブログシステムを一から作るのは大変だし、 WordPressやMobableTypeで提供されてるような優れたインターフェイスはありません。

なのでWordPressやMobableTypeの出力をCakePHPのビューとして使っちゃえば WordPressやMobableTypeの優れたインターフェイスを利用しつつ柔軟なコンテンツのコントロールが可能になります。

そういうわけでこんなことをしたのです。 ホントはデータベースから取得したかったんですがね・・・

プラグインが使えなくなる場合もありますが、WordPressの場合、ほとんどのものは PEARやZend FlameWork、その他のライブラリを利用すれば比較的簡単に同じ機能を実現することが可能です。

怖れずにフレームワークに乗せてみましょう。 ブログ以外のコンテンツもある場合、特に便利だと思えるはずです。

投稿日 2011年2月25日 15:27
カテゴリ PHP
タグ CakePHP | MovableType | WordPress
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1221

コメント

コメントする
Name
Email Address
URL