Structures_DataGrid_Renderer_Flexy

Structures_DataGrid_Renderer_Flexy -- Flexy レンダリングドライバ

注意

このドライバは 実験的な もので、まだ正式にはリリースされていません。 CVS 版 でしか使用できません。

サポートする操作モード

このドライバは次の操作モードをサポートしています。

表 62-1このドライバがサポートする操作モード

モードサポートしている?
コンテナのサポートyes
出力バッファリングyes
ダイレクトレンダリングno
ストリーミングno
オブジェクトの永続化no

オプション

このドライバは、以下のオプションを受け付けます。

表 62-2このドライバのオプション

オプション説明デフォルト値
assocColumnsboolカラムヘッダを連想配列として作成するかどうか。true
buildFooterboolフッタを作成するかどうか。true
buildHeaderboolヘッダを作成するかどうか。true
columnAttributesarray カラムのセルの属性。 array(fieldName => array(attribute => value, ...) ...) 形式の配列となります。 このオプションは、XML/HTML ベースのドライバでのみ使用します。 array()
columnNamesarrayカラムヘッダで使用するカラム名のセット。array()
convertEntitiesbool html エンティティを変換するかどうか。 htmlspecialchars() をコールします。 true
defaultCellValuestring空のセルに表示するデフォルトの値。null
defaultColumnValuesarray カラムごとに指定するセルのデフォルト値。 array(fieldName => value, ...) 形式の配列となります。 array()
encodingstring 内容のエンコーディング。mbstring 拡張モジュールが使用可能な場合、 デフォルト値は mb_internal_encoding() から取得します。 それ以外の場合のデフォルト値は ISO-8859-1 となります。 'ISO-8859-1'
evenRowAttributestring偶数行に使用する css クラス。'even'
excludeVarsarray作成される HTTP クエリから取り除く変数。array()
extraVarsarray作成される HTTP クエリに追加される変数。array()
fillWithEmptyRowsboolすべてのページで行数が同じになるようにするかどうか。false
formatterarrayカラムヘッダの formatter メソッドで使用するコールバックの配列。array($this,'defaultHeaderFormatter')
hideColumnLinksarray デフォルトでは、すべてのカラムで並べ替えリンクが有効になります。 このオプションを使用すると、指定したカラムの並べ替えリンクを無効にできます。 array(fieldName, ...) 形式の配列で指定します。 このオプションは、並べ替えをサポートしているドライバでのみ有効です。  
numberAlignbool数値を右詰めにするかどうか。true
oddRowAttributestring奇数行に使用する css クラス。'odd'
onMovestring ユーザがページを移動したりデータをソートしたりしたときの onClick/onSubmit イベント発生時にコールする Javascript 関数の名前。 この関数は、オブジェクトを引数として受け取ります。 このオブジェクトの形式は { page: <page>, sort: [{field: <field>, direction: <direction>}, ...], data: <user_data> } のようになります。このオプションを指定しても、 href 属性は削除されないことに注意しましょう。 href を無効にしたい場合 (AJAX など……) は、ハンドラ関数内で false を返すようにしなければなりません。 null
onMoveDatastring onMove に渡す引数のオブジェクトの、"data" に渡すデータ。JSON 形式のシリアル化は行わず、 そのままの形で "data" 属性に渡されます。 クォートやスラッシュなどを追加する処理は、自分で行ってください。 ''
pagerOptionsarrayPager レンダラに送信する独自のオプション。 
resultsFormatstring結果を表示する際に使用する sprintf の書式文字列。'You have %s results in %s pages'
selfPathstring並べ替えおよびページ処理に使用するパス。$_SERVER['PHP_SELF']
sortingResetsPagingbool並べ替えの HTTP クエリで、ページをリセットするかどうか。true

全般的な注意

このドライバは render() メソッドをサポートしていません。 コンテナを現在の Flexy インスタンスにアタッチすることのみが可能となっています。 レンダラに対するオプションは setOptions() メソッドで渡さなければなりません。

Flexy の出力のバッファリングには、DataGrid の getOutput() メソッドを使用します。

このドライバは、次のような Flexy テンプレート変数を代入します。 - columnSet: カラムのラベルおよび並べ替えリンクの配列 - columnHeader: カラムのラベルおよび並べ替えリンクのオブジェクト - recordSet: レコードの値を表す連想配列 - numberedSet: レコードの値を表す数値添字配列 - currentPage: 現在のページ (1 から数えます) - recordLimit: 1 ページあたりの行数 - pagesNum: ページ数 - columnsNum: カラム数 - recordsNum: 現在のページのレコード数 - totalRecordsNum: レコードの総数 - firstRecord: 最初のレコードの番号 (1 から数えます) - lastRecord: 最後のレコードの番号 (1 から数えます)

このドライバは、getPaging という名前の Smarty カスタム関数も登録します。 これは Smarty テンプレート内で {getPaging} としてコール可能で、 ページ処理用のリンクを表示します。この関数は、Pager::factory() と同じ形式のオプションをパラメータとして受け付けます。

動的なテンプレートの例です。並べ替えおよびページ処理を含みます。

<!-- カスタム関数 getPaging でページ移動リンクを表示します -->
{getPaging():h}

<p>Showing records {firstRecord} to {lastRecord}
from {totalRecordsNum}, page {currentPage} of {pagesNum}</p>

<table cellspacing="0">
   <!-- ヘッダを作成します -->
   <tr>
       <th>
           {foreach:columnSet,column}
               <td><a href="{column[link]:h}">{column[label]:h}</a></td>
           {end:}
       </th>
   </tr>

   <!-- 本体を作成します -->
   <tr class="{getRowCSS()}" flexy:foreach="numberedSet,k,row">
       {foreach:row,field}
           <td>{field}</td>
       {end:}
   </tr>
</table>

静的なテンプレートの例です。並べ替えおよびページ処理を含みます。

<table cellspacing="0">
   <!-- ヘッダを作成します -->
   <tr>
       <th>
           <td>
               <a href="{columnHeader.name[link]:h}">{columnHeader.field1[label]:h}</a>
           </td>
           <td>
              <a href="{columnHeader.surname[link]:h}">{columnHeader.field2[label]:h}</a>
           </td>
       </th>
   </tr>

   <!-- 本体を作成します -->
   <tr class="{getRowCSS()}" flexy:foreach="recordSet,k,row">
       <td>{row[field1]}</td>
       <td>{row[field2]}</td>
   </tr>
</table>

require_once 'HTML/Template/Flexy.php';
require_once 'Structures/DataGrid.php';
require_once 'Structures/DataGrid/Renderer/Flexy.php';

$tpl = new HTML_Template_Flexy($config['HTML_Template_Flexy']);
$dg =& new Structures_DataGrid($_GET['setPerPage'] ? $_GET['setPerPage']
                                                   : 10,$_GET['page']
                                                   ? $_GET['page'] : 1);
$dg->bind($dataObject);
$renderer = new Structures_DataGrid_Renderer_Flexy();
$renderer->setContainer($tpl);
$renderer->setOptions($config['Structures_DataGrid']);
$dg->attachRenderer($renderer);
$this->tpl->compile($template);
echo $dg->getOutput();