[PHP] ソースコードを少し晒してみる。

PHPでサイト構築する上での、弊社のソースコードの一部をさらしてみようと思います。

直接お会いさせて頂いた方には、お話の中で触れていたりするのですが、弊社ライブラリの「ppjQuery」。

ppjQueyrを使うと、次のような感じで書くことができるようになります。

コントローラ.php (共通処理)

// ppjQuery の xhtmlクラスをnew
$x = $_G_XHTML = new ppjQueryXhtml();

// domを作成し、head、bodyを作成
// @タグ名と書くことで、内部的に
// document.createElement(タグ名) します。
$_G_XHTML
->createDom()
->setOutputFormat(false)
->append($_G_XHTML->q('@head'))
->append($_G_XHTML->q('@body'));

// $_G_INCLUDE_PATH は、コントローラから取ってきた
// URLに対応するPHPファイルのパス
include $_G_INCLUDE_PATH . '.php';

// headerを飛ばす
$_G_AULTA->setOutputEncode('utf-8');
$_G_AULTA->sendHeader();

// gzipして
ob_start('ob_gzhandler');

// 出力
// 引数 = true; : HTMLを整形して出力。
// 引数 = false; : HTMLタグを無改行で詰めて出力。
echo $_G_XHTML->setOutputFormat(false);

// unset
unset($_G_XHTML);
// flush
ob_end_flush();

$_G_INCLUDE_PATH . '.php' (ページ個別)

<?php
// 共通ヘッダ
include CA_PATH_PC . 'manager/_common/before.php';

// id[main_title] に、テキストをセット
// ->text(); ならば、 < を &lt; にする必要はありません。
$x->q('#main_title')
->text('ショップ情報 << サイト管理');

$x
->q('#main_content')
->emptyAll() // 空っぽにする
->append( // append
$x->q('@h3')->text('抽出条件')
)
->append(
$x->form('./shop.html') // <form></form> を作成
->attr('id', 'querys')
->append(
// tableタグ作成、二次元配列を渡す
$x->table(array(
array('No', $x->formText('OrgNo', ''), ''), // input text
array('名称', $x->formText('OrgName', ''), '部分一致、カナ'),
array('電話番号', $x->formText('TelNo', ''), 'ハイフンなし'),
array('Fax番号', $x->formText('FaxNo', ''), 'ハイフンなし'),
array('テスト', $x->formCheckbox('checktest', 10, 'テスト'), 'チェックを入れる'), // checkbox
array('テスト', $x->formRadio('radioTest', -1, // radio
array(1 => 'テスト1', 2 => 'テスト2', 3 => 'テスト3')
), 'どれか選択')
), 0, 1) // 左上から、0行1列をTHタグにする。
)
->append(
$x->table(thisGetAttributeTable($x), 0, 1)
)
->append(
$x->table(array(
array('都道府県', $x->formSelect('AreaNo', 0, thisGetPrefList())), // <select>
array('並び順', $x->formSelect('SortOrder', 0, array(0 => '昇順', 1 => '降順'))),
array('表示フラグ', $x->formSelect('FlgVisible', 0, array(0 => '問わず', 1 => 'Onのみ', 2 => 'Offのみ'))),
array('取得件数', $x->formSelect('GetCount', 10,array(
10 => '10件', 20 => '20件', 30 => '30件', 50 => '50件', 100 => '100件', 200 => '200件', 300 => '300件')
))
), 0, 1)
)
->append(
$x->p($x->formSubmit('submit', '更新する')) // input submit
)
)
;
// 共通フッタ
include CA_PATH_PC . 'manager/_common/after.php';

基本的な書き方

// newします。
// この時点では、空っぽのクラスです。
// $x にも同時に入れておくことで記述が楽になるでしょう。
$x = $_G_XHTML = new ppjQueryXhtml();

// 既存のHTMLファイルを読み込む場合はloadします。
$x->loadFromFile('ファイルパス');

// 空っぽから作るなら、domを生成します。
$x->createDom();

// HTML形式で作成するので、とりあえずheadとbodyを作ります。
$x
->append($_G_XHTML->q('@head'))
->append($_G_XHTML->q('@body'));

php5.3 以降を利用しているならば!!

// こんな書き方ができてしまいます。
// どうでしょう?jQueryっぽくないですか?
$x('body div#hoge')->html('fuga');

php5.3 より前のバージョンを利用しているならば!!

// こうなります。
// queryの q を メソッド名に当てています。
$x->q('body div#hoge')->html('fuga');

テンプレートファイルでデザインらくらく

ドリームウィーバーなどでHTML作成を行っている場合ですと、次のように書くことでテンプレートファイルを読み込むことができます。
テンプレートを読み込んだあとは、ppjQueyrで、書き換える必要のある箇所だけ書き換えてそのまま出力することができます。
これならデザイナーさんとプログラマーさんの分業もらくらくですね。

// 下記のコードは、テンプレート.htmlファイルの<body>を読み込み、$xの<body>へセットしています。
$path = 'テンプレートファイル.html';
$p = new ppjQueryXhtml();
$x->q('body')
->html(
$p->loadFromFile($path)->q('body')->html()
);
unset($p);

ppjQueryは、3つのクラスからできています。

まず、 ppjQueryクラス。

jQuery的な機能の全ては、このクラスに集約されています。
通常のXMLを扱う場合はこのクラスだけで充分です。

次に、 ppjQueryXhtmlクラス。

上記のサンプルで使ったクラスです。
これは、
class ppjQueryXhtml extends ppjQuery{}
です。
ppjQueryクラスを継承し、XHTMLの操作に役立つメソッドを中心に独自拡張したものです。

$x->table(array, col, row);
とか、
$x->form(action, method);
などなどが含まれます。

で、3番目ですが、ppjQueryMobile という名前です。

このクラスでは、携帯電話対象のXHTMLを中心に役立つメソッドが盛り込まれます。
たとえば、
$x->border(color, height, margin);
って書くだけで、どの携帯機種でも同じように見えるXHTMLが作られるって寸法です。

どこで手に入れますか?

で、こんなに便利で、webサイトの制作手法が根本から変わってしまうようなppjQueryですが、まだ配布できる段階になっておりません。

現在は、こういう状況であったりします。
http://twitter.com/aulta/status/9429469432
興味がある方、いらっしゃいませんか?

また、
http://ppjquery.net/
こういう感じであったりします。

2月なんて書いてしまっていますが、無理です。
ボチボチ進めていきます。

興味がございましたら、お気軽にご連絡くださればと思います。