VCL for PHP-PHPコンポーネントの標準規格
Delphi for PHPは、VCL for PHPによって、ビジュアルなIDEに統合可能なPHPコンポーネントを作成するための標準規格を提供します。この標準規格は、既存のPHPのコードベースを再利用できるよう、可能な限りオープンであるかがチェックされています。
コンポーネントを作成することにより、次のようなメリットを得られます。
- 動作済みの機能を抽象化およびラップし、プロパテイ、メソッドやイベントを通して簡単に利用可能なインターフェースを提供できる
- 最高の再利用性を提供できる
- 最良のビジュアル開発のエクスペリエンスを享受できる
- さらに、サードパーティがコードを簡単に利用できる
以前ブログに掲載した記事では、わずかなHTMLとCSSで簡単にグラフを作成できることを見ました。それでは、それらのコードをコンポーネントにラップして、ツールパレットへのインストールや、フォームへのドラッグ&ドロップ、オブジェクトインスペクタでのプロパティ設定が行えるようにしましょう。
もし、Delphi for Windowsのコンポーネントを作成したことがあれば、この手順がいかにそれと似ているかが分かるでしょう。
コンポーネント作成の手順 1
フォルダ構成
コンポーネントは VCL for PHPフォルダ内の中に作らなければなりません。そのため、C:\Program Files\CodeGear\Delphi for PHP\2.0\vclの中にcsschartというフォルダを作成して、csscharts.inc.phpという名前のユニットを作成しましょう。このユニットは、これから記述しようとしている新しいコンポーネント用のコードになります。
クラスの派生
開発を始めるにあたり、ある既存のクラスから派生することが可能で、例えば、派生するのに最も適切なクラスはControlです。このControlクラスは、内部にコントロールをドラッグ&ドロップするのは許可しないものの、コンテナの中には配置可能であるビジュアルコントロールを作成したい場合には適切なクラスです。
以下は、コントロールの基本的なコードです。
<?php use_unit("controls.inc.php"); class CSSChart extends Control { function __construct($aowner = null) { parent::__construct($aowner); } } ?>
このコンポーネントクラスはCSSChartという名前で、Controlから派生し、後に利用するためにコンストラクタをオーバーライドしています。
プロパティの追加
チャートに表示するデータを格納するためのプロパティが必要になりますので、追加してみましょう。[Edit]-[Add published property]を選択すると、プロパティ名とデフォルト値の入力を促されます。以下が生成されたコードです。
protected $_data = array(); function getData() { return $this->_data; } function setData($value) { $this->_data = $value; } function defaultData() { return array(); }
情報を効率的に格納するprotectedなフィールドおよび、getter/setter/default関数が生成されました。このプロパティは'get'で始まるので、オブジェクトインスペクタに表示され、ユーザーによる値の変更も可能になります。
初期化
次に初期化用のコードを追加する必要があります。例えば、コントロールのデフォルトのサイズを設定し、デフォルト値に合致するように配列データを初期化します。
コンストラクタは次のようになるはずです。
function __construct($aowner = null) { parent::__construct($aowner); //Set the initial properties on the constructor $this->Width = 330; $this->Height = 145; $this->_data = array(); }
コンポーネントはどのようにHTMLを出力するのか?
以前ブログに掲載した記事には異なる形式のチャートがありましたが、例として水平バーのチャートを取り上げます。そのチャートを描画するのに使用したHTMLコードを見てみると、次のようになっています。
<ul class="chartlist"> <li> <a href="http://www.example.com/fruits/apples/">Apples</a> <span class="count">420</span> <span class="index" style="width: 42%">(42%)</span> </li> <li> <a href="http://www.example.com/fruits/bananas/">Bananas</a> <span class="count">280</span> <span class="index" style="width: 28%">(28%)</span> </li> <li> <a href="http://www.example.com/fruits/cherries/">Cherries</a> <span class="count">200</span> <span class="index" style="width: 20%">(20%)</span> </li> <li> <a href="http://www.example.com/fruits/dates/">Dates</a> <span class="count">100</span> <span class="index" style="width: 10%">(10%)</span> </li> </ul>
これらは基本的なリストであり、それぞれの項目にはテキストと2つのspanタグがあります。VCL for PHPのコンポーネント開発の基本は、コンポーネントのプロパティによって提供される情報を使用して、動的なコードでそれらのHTMLデータを出力することです。
ブラウザに何か表示するようコンポーネントに指示するには、dumpContents()メソッドをオーバーライドします。このメソッドは、コンポーネントのコンテンツを生成するために呼び出されます。では、HTMLデータを生成するために、以前追加したDataプロパティを使ってみましょう。
function dumpContents() { //Get the data to use $data = $this->_data; //Echoes the start of the list echo '<ul class="chartlist">'; //Iterates through the data and dump each <li> tag reset($data); while(list($key, $val) = each($data)) { echo '<li>'; echo '<A href="">'; echo $key; echo '</a>'; echo '<span class="count">' . $val . '</span>'; echo '<span class="index" style="width: ' . ($val / 10) . '%">(' . ($val / 10) . '%)</span>'; echo '</li>'; } //Echoes the end of the list echo '</ul>'; }
このコードは、表示するデータを繰り返し処理して、配列データの項目それぞれに応じて必要なコードを出力します。