Structures_DataGrid_Renderer_Smarty
Structures_DataGrid_Renderer_Smarty – Smarty レンダリングドライバ
サポートする操作モード
このドライバは次の操作モードをサポートしています。
このドライバがサポートする操作モード
モード |
サポートしている? |
コンテナのサポート |
yes |
出力バッファリング |
yes |
ダイレクトレンダリング |
no |
ストリーミング |
no |
オブジェクトの永続化 |
no |
オプション
このドライバは、以下のオプションを受け付けます。
このドライバのオプション
オプション |
型 |
説明 |
デフォルト値 |
associative |
bool |
デフォルトでは、カラムセットやレコードは数値添字配列となります。
このオプションを true に設定すると、配列のキーがフィールド名となります。
|
false |
buildFooter |
bool |
フッタを作成するかどうか。 |
true |
buildHeader |
bool |
ヘッダを作成するかどうか。 |
true |
columnAttributes |
array |
カラムのセルの属性。
array(fieldName => array(attribute => value, ...) ...)
形式の配列となります。
このオプションは、XML/HTML ベースのドライバでのみ使用します。
|
array() |
convertEntities |
bool |
html エンティティを変換するかどうか。
htmlspecialchars() をコールします。
|
true |
defaultCellValue |
string |
空のセルに表示するデフォルトの値。 |
null |
defaultColumnValues |
array |
カラムごとに指定するセルのデフォルト値。
array(fieldName => value, ...) 形式の配列となります。
|
array() |
encoding |
string |
内容のエンコーディング。mbstring 拡張モジュールが使用可能な場合、
デフォルト値は mb_internal_encoding() から取得します。
それ以外の場合のデフォルト値は ISO-8859-1 となります。
|
'ISO-8859-1' |
excludeVars |
array |
作成される HTTP クエリから取り除く変数。 |
array() |
extraVars |
array |
作成される HTTP クエリに追加される変数。 |
array() |
fillWithEmptyRows |
bool |
すべてのページで行数が同じになるようにするかどうか。 |
false |
hideColumnLinks |
array |
デフォルトでは、すべてのカラムで並べ替えリンクが有効になります。
このオプションを使用すると、指定したカラムの並べ替えリンクを無効にできます。
array(fieldName, ...) 形式の配列で指定します。
このオプションは、並べ替えをサポートしているドライバでのみ有効です。
|
array() |
numberAlign |
bool |
数値を右詰めにするかどうか。 |
true |
onMove |
string |
ユーザがページを移動したりデータをソートしたりしたときの
onclick/onsubmit イベント発生時にコールする Javascript 関数の名前。
この関数は、オブジェクトを引数として受け取ります。
このオブジェクトの形式は { page: <page>,
sort: [{field: <field>, direction: <direction>}, ...], data:
<user_data> }
のようになります。このオプションを指定しても、
href 属性は削除されないことに注意しましょう。
href を無効にしたい場合 (AJAX など……)
は、ハンドラ関数内で false を返すようにしなければなりません。
|
null |
onMoveData |
string |
onMove に渡す引数のオブジェクトの、"data"
に渡すデータ。JSON 形式のシリアル化は行わず、
そのままの形で "data" 属性に渡されます。
クォートやスラッシュなどを追加する処理は、自分で行ってください。
|
'' |
selfPath |
string |
並べ替えおよびページ処理に使用するパス。 |
$_SERVER['PHP_SELF'] |
sortingResetsPaging |
bool |
並べ替えの HTTP クエリで、ページをリセットするかどうか。 |
true |
varPrefix |
string |
このドライバが割り当てる Smarty 変数や関数用の接頭辞。
Structure_DataGrid::setRequestPrefix()
と組み合わせて使用することにより、
ひとつのページに複数のグリッドを表示できるようになります。
|
'' |
全般的な注意
このドライバを使用するには、
http://smarty.php.net
で入手できる Smarty テンプレートが必要です。
このドライバは render() メソッドをサポートしていません。
fill() で Smarty オブジェクトを代入します。
これは、変数を代入して Smarty 関数 {getPaging} を登録します。
Smarty オブジェクトを設定したあとに、あなたが自分で
Smarty::display() をコールします。
あるいは、getOutput() を使用するとすべての変数を PHP の配列として取得できます。
これを使用して、お好みの方法で Smarty インスタンスに変数を設定することもできます。
このドライバは、次の Smarty 変数を代入します。
- $columnSet: カラム設定の配列。
構造は次のとおり。
array (
0 => array (
'name' => フィールド名,
'label' => カラムのラベル,
'link' => 並べ替え用のリンク,
'attributes' => 属性文字列,
'direction' => 'ASC'、'DESC' あるいは '',
'onclick' => onMove 関数
),
...
)
- $recordSet: レコードの値の配列。
- $currentPage: 現在のページ (最初のページは 1)。
- $nextPage: 次のページ。
- $previousPage: 前のページ。
- $recordLimit: ページ単位の行数。
- $pagesNum: ページ数。
- $columnsNum: カラム数。
- $recordsNum: 現在のページのレコード数。
- $totalRecordsNum: 総レコード数。
- $firstRecord: 最初のレコード番号 (1 から数え始める)。
- $lastRecord: 最後のレコード番号 (1 から数え始める)。
- $currentSort: カラム名および並べ替えの方向の配列。
- $datagrid: {getPaging} に渡す参照。
このドライバは、getPaging という名前の Smarty カスタム関数を登録します。
これは Smarty テンプレート内で {getPaging} としてコール可能で、
ページ処理用のリンクを表示します。この関数は、
Structures_DataGrid_Renderer_Pager の pagerOptions
と同じ形式のオプションをパラメータとして受け付けます。
{getPaging} には、オプションのパラメータ "datagrid"
を渡すことができます。これは $datagrid で指定します。
これを使用すると任意のデータグリッドに関するページ処理をすることができます
(ひとつのページに複数のグリッドを配置する際に便利です)。
オブジェクトの記録 : このドライバは、渡されたオブジェクトのレコードを記録します。
つまり、データソースから渡されるレコードが連想配列ではなくオブジェクトだった場合、
そのプロパティやメソッドを Smarty テンプレートから直接利用できるようになります。
たとえば {$recordSet[col]->getSomeInformation()} のようにします。
例
<?php
require_once 'Structures/DataGrid.php';
require_once 'Smarty.class.php';
$datagrid =& new Structures_DataGrid(10);
$options = array('dsn' => 'mysql://username@localhost/mydatabase');
$datagrid->bind("SELECT * FROM mytable", $options);
$smarty = new Smarty();
$datagrid->fill($smarty);
$smarty->display('smarty-simple.tpl');
?>
並べ替えとページ処理を行う Smarty テンプレート (smarty-simple.tpl)
<?php
<!-- カスタム関数 getPaging でページ移動リンクを表示します -->
{getPaging prevImg="<<" nextImg=">>" separator=" | " delta="5"}
<p>Showing records {$firstRecord} to {$lastRecord}
from {$totalRecordsNum}, page {$currentPage} of {$pagesNum}</p>
<table cellspacing="0">
<!-- ヘッダを作成します -->
<tr>
{section name=col loop=$columnSet}
<th {$columnSet[col].attributes}>
<!-- カラムが並べ替え可能かどうかを調べます -->
{if $columnSet[col].link != ""}
<a href="{$columnSet[col].link}">{$columnSet[col].label}</a>
<!-- 現在の並べ替え方向を矢印で表示します -->
{if $columnSet[col].direction == "ASC"}
↓
{elseif $columnSet[col].direction == "DESC"}
↑
{/if}
{else}
{$columnSet[col].label}
{/if}
</th>
{/section}
</tr>
<!-- 本体を作成します -->
{section name=row loop=$recordSet}
<tr {if $smarty.section.row.iteration is even}bgcolor="#EEEEEE"{/if}>
{section name=col loop=$recordSet[row]}
<td {$columnSet[col].attributes}>{$recordSet[row][col]}</td>
{/section}
</tr>
{/section}
</table>
?>