ethnaAdminにPDOアクセスとテンプレート選択追加

PDOでの接続とテンプレートエンジンの選択を追加しました。


DBコネクタ

  1. PEAR::DB - PHP4/5
  2. PEAR::MDB2 - PHP4/5
  3. PDO - PHP5
  4. S2Dao(内部でPDO利用) - PHP5

上の2つはEthnaでの利用実績があり、PHP4でも利用できるものです。PDOでのアクセスが今後は増えてくると思うのですが、なかなか移行していきませんよね。。。

Doctrineとかにも興味があるのですが、時間がないのでもう少し落ち着いてかな。でもsymfonyではサポートされているみたいですね。

テンプレートエンジン

  1. Smarty
  2. PHP
  3. HTML_Template_Flexy

PHPテンプレートと呼んでいいのかは微妙ですが、PHPでごりごり書けます。Flexyの方は楽しそうですがまだ利用実績が少ないと思いますので実務で使うのには少し手間がかかりそうです。

rhacoとかも選択肢としてありましたが、rhaco自体がフレームワーク?と思ったので今回は入れていません。

上記以外にも何かいいのがあれば入れて行きたいと思いますが、有名なのはこれぐらいかな? あまり増やしてもサポートしていけないですし、迷っちゃいますよね(笑)

利用例

PDO
<?php
$dbObj = & $this->backend->getDB();
$dbObj->begin(); // start transaction
$table_name = "table1";
$queryArray = array(
 "key1" => "value1",
 "key2" => 3,
);
$whereArray = array(
 "key3" => 3,
);
$dbObj->update( $table_name, $queryArray );
$dbObj->commit();

基本的にごりごり直接PDOを操作します。あまり変にラッピングしない方が便利ですよね。

http://dozo.matrix.jp/pear/index.php?Framework%2FEthna%2FPDO
こちらのページから利用させていただいています。

PHPテンプレート
<?php
<div id="header">
    <h1>Tttt</h1><?php echo( $this->ctl->client_encoding ) ?>
</div>

こちらもPHPでごりごり書いていきます(笑)
実はapp以下のデータを取るのは簡単なのですが、client_encodingなどのシステムの内部にあるデータを取るのはどこから取ればいいのか調べるのが大変だったりします。。。

実際に利用する場合には、上記みたいにctlとかを直接さわるのは危険ですのでappなどに明示的に追加した方がいいと思います。

http://d.hatena.ne.jp/maru_cc/20080413
こちらのページから利用させていただいています。

実は他の作者のPHPレンダーがあったので、そちらを元に改造して動くようにしたのですが、上記を後で発見してこちらを利用しました。

RSSで購読しているページなのに。。。見た記憶はあったんだけれどなー(笑)

HTML_Template_Flexy
<?php
<link rel="stylesheet" href="{config[url]}css/ethna.css" type="text/css" />
</head>
<body>
<div id="footer">
    Powered By <a href="http://ethna.jp">Ethna</a>-{constant(#ETHNA_VERSION#)}.

んーん、こいつはよくわからないけれど、入れてみた(笑)
みたところJavaっぽい感じのテンプレートですね。

このテンプレートエンジンでclient_encodingを取得することができませんでした。。。appか専用の名前で入れておけばいいと思うのですが、今回本体には無改造をコンセプトにしていますんで。。。

ファイル構成

こんな感じですべてlib以下に押し込んでいます。PEAR::DBとSmartyはとりあえず標準構成なのでどの構成でも入れています。

拡張した部分は/lib/User/以下にフォルダを掘って入れています。Ethna本体のバージョンアップなどはEthnaディレクトリを全部消して上書きすれば終わります。

一応初期templateと標準スケルトンはテンプレートエンジンごとに正常に表示できるものに書き換えています。

感想

んー、これより先にエディタ上でアクションのペアになっているテンプレート開く処理とか入れないといけないのに〜。。。

作業効率あげるぜってMacBook買ったのですが、全然操作方法わからなくて結局Windows上で作業している罠(笑)

一応Updateに最新版入れていますが、現状はかなり中途半端な状態です。プロジェクトの新規作成だけはちゃんと動きますがそれ以外のツリーとかは作りかけです。。。