nsbucky/gridview

从数组生成表格的简单方法

1.0 2014-06-01 14:58 UTC

This package is auto-updated.

Last update: 2024-09-18 16:38:07 UTC


README

受到Yii的CGridView的启发,这个类旨在成为从数组生成表格的简单方法,即数据库结果集。它基于数组数组或对象数组。您可以选择显示哪些数组列或对象属性。它不会重写查询或处理分页,这由您自己决定。

特性

  • 可配置的标题
  • 生成排序URL
  • 默认使用Bootstrap表格CSS
  • 提供的列类型可加快开发速度
  • 表格实现ArrayAccess以简化表格构建。

列类型

GridView提供了一些不同的列类型,用于计算或显示特定数据类型。

  • 列:默认列类型,支持可见性、自定义标题和过滤器
  • CalcColumn:传入一个闭包以执行计算
  • CheckBoxColumn:在表格单元格中生成复选框
  • DateTimeColumn:使用PHP的DateTime对象格式化日期字符串
  • LinkColumn:生成锚点标签
  • TotalColumn:计算列并在表格页脚中放置总计
  • ButtonColumn:用于查看/编辑/删除等操作。附带示例按钮

所需设置

composer.json文件的require键中添加以下内容

"nsbucky/gridview": "dev-master"

快速示例

$dataSource = array();
for($i=0; $i<10; $i++) {
	$dataSource[] = array(
	            	'uniqid'=>uniqid(), 
	            	'loop_iterator'=>$i.' times',
	            	'date'=>date('Y-m-d'),
	            	'total'=>rand(1,25)
	           	);		        
}

$table = new GridView\Table($dataSource);
echo $table; // renders table based on results

$table = new GridView\Table($dataSource);
$table->addViewButton('view/{uniqid}')
    ->addEditButton('edit/me')
    ->addDeleteButton('delete/it');
echo $table; // will render table based on results with some buttons in last column

// in a list view
$table = new GridView\TableList($dataSource[0]);
echo $table; // will render a 2 column table with the column headers on left

更长的示例

$dataSource = array();
for($i=0; $i<10; $i++) {
	$dataSource[] = array(
	            	'uniqid'=>uniqid(), 
	            	'loop_iterator'=>$i.' times',
	            	'date'=>date('Y-m-d'),
	            	'total'=>rand(1,25)
	           	);		        
}

$table = new GridView\Table($dataSource);
$table->addColumn(
	array('name'=>'uniqid') // defaults to GridView\Columns\Column
)
->addColumn(
	new GridView\Columns\LinkColumn(array(
		'url'=>'/link/to/date/{date}',
		'label'=>'Date Link'
	))
)
->addColumn(
	new GridView\Columns\Column(array(
		'name'=>'total',
		'value'=>function($data, $index) {
			return $data['total']. ' dinosaurs were eaten today'
		}
	))
)
->addColumn(
	new GridView\Columns\DateTimeColumn(array(
		'name'=>'date',
		'visible'=> (date('j') % 2)
	)) 
);


// or via array access
$table[] = array('name'=>'loop_iterator');

$table[] = new GridView\Columns\ButtonColumn(array(
        'buttons'=>array(
            new GridView\Buttons\ViewButton('/view'),
            new GridView\Buttons\EditButton('/edit'),
            new GridView\Buttons\DeleteButton('/delete'),
        )
    ));

echo (string) $table; // renders table