既存のドライバの中に要件を満たすものがない場合は、 独自のデータソースドライバを書くことになります。 これはとても簡単に行うことができ、非常に柔軟性が高くなります。
風変わりなソースからデータを取得する場合に 独自のドライバを書く必要があるのは当然ですが、 それ以外にも、特にデータベースなど (それに限りませんが) へのアクセスを最適化するといった目的でも独自のドライバを書くことがあります。
このドキュメントでは、データソースのインターフェイスとその実装方法を説明します。
データソースドライバ は、 Structures_DataGrid_DataSource クラスを継承したものです。 これは データソースインターフェイス を実装しています。
データソース は、 データソースドライバ と同じ意味で使用します。
データソースインターフェイス には、 ドライバがオーバーロードするメソッド群が含まれます。また、 ドライバが使用できる protected なプロパティや推奨する実装が含まれます。
データソースコンテナ は定数あるいは任意の型 (string, array, object など) の変数で、データ自身あるいはデータの取得方法が含まれます。
すべての データソースドライバ は、 指定した データソースコンテナ に固有のもので、 そのコンテナを処理する方法を知っています。
コンストラクタでは、もしデフォルトのオプションがあればそれを設定する必要があります。 その後で親クラスのコンストラクタをコールします。このメソッドは必須ではありません。
bind() は、データソースの container をドライバに読み込みます。その際に options を適用します。このメソッドは必須ではありません。 失敗した場合には PEAR_Error オブジェクトを返す必要があります。
count() は、コンテナ内のレコード総数を返します。 このメソッドは必須で、fetch() の前に常にコールされます。 失敗した場合には PEAR_Error オブジェクトを返す必要があります。
sort() は、 sortSpec およびオプションの sortDir にしたがってデータを並べ替えます。 このメソッドは必須で、fetch() の前に常にコールされます。 失敗した場合には PEAR_Error オブジェクトを返す必要があります。
fetch() は二次元の配列でデータを返さなければなりません。 返されるデータは offset で指定した場所のレコードから始まり、 len で指定した件数を含みます。このメソッドは必須です。 失敗した場合には PEAR_Error オブジェクトを返す必要があります。
まずはシンプルなドライバからはじめてみましょう。そのほうが、読んで理解しやすいでしょう。 こんな SQL クエリのために独自のドライバを書くのは実用的ではありませんが、 はじめの一歩としてはお勧めです。
例 62-1シンプルな SQL アダプタ
|
実際に使用する前に dump() メソッドでドライバをテストしてみることをお勧めします。
例 62-2dump() によるテスト
|
このメソッドは、次のようにきれいに整形されたテキストのテーブルを出力します。
農場には 23 匹の猫がいます 一番軽いほうから 5 匹を表示します。 +---------+---------+-----------+--------+ | name | species | birthDate | weight | +---------+---------+-----------+--------+ | sarge | cat | 20021220 | 1.8 | | etch | cat | 20000509 | 2.5 | | potato | cat | 19980128 | 3.8 | | sid | cat | 20011101 | 4.1 | | woody | cat | 19970712 | 6.0 | +---------+---------+-----------+--------+ |
さあ、これであなた専用のドライバができあがり、テストも完了しました。 そろそろ Structures_DataGrid で使用してみましょう。
そのためには、 bindDataSource() メソッドを使用します。
例 62-3独自のデータソースのバインド
|
これは、並べ替えのできる HTML テーブルを出力します。
もちろん、それ以外の Structures_DataGrid の機能も使用可能です。 例えばページ処理をしたり、XML や MS-Excel などの別のフォーマットで出力したりなどができます。