Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Delphi for PHPでコンポーネントを作成する

Delphi for PHPのビジュアル開発で利用できるコンポーネントを自作

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/05/12 13:10

Delphi for PHPは、ドラッグ&ドロップのビジュアル操作でPHP Webアプリケーションを開発できるツール。標準で搭載されたコンポーネントのほかに、独自のコンポーネントを作成してビジュアル開発に利用できます。この記事では、自作のコンポーネントの作成手順を紹介します。

目次

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>';
}

 このコードは、表示するデータを繰り返し処理して、配列データの項目それぞれに応じて必要なコードを出力します。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • EDN編集部(イーディーエヌ編集部)

    エンバカデロ・デベロッパーネットワーク(EDN)は、ソフトウェア開発者とデータベース技術者のための技術情報サイトです。Delphi、C++Builderをはじめとする開発ツールやER/Studioなどのデータベースツールに関連する技術記事、ビデオなどを提供しています。EDN編集部は、EDN記事と連携...

  • Jos&eacute; Le&oacute;n Serna(Jos&eacute; Le&oacute;n Serna)

    Delphi for WIndowsの最初のバージョンから、メインの開発ツールとして採用し、1998年より開発ツールビジネスに関わってきて、現在は、Delphi for PHPのプリンシパル・アーキテクチャを務めています。PHPを使いはじめたのは、バージョン4からで、Delphi for PHPが、...

バックナンバー

連載:Delphi for PHPでコンポーネントを作成する
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5