vkrtecek / table
基本表格构建器。
Requires
- php: >=7.0.0
- donquixote/cellbrush: ^1.0
Requires (Dev)
- phpunit/phpunit: ~5.7
README
该库专注于对象数组的简单表格渲染。无数据库连接,仅插入数组。
许可
Table 库是开源软件,许可协议为 MIT 许可协议。
安装
composer require vkrtecek/table
示例
假设我们有一个测试类,如下所示,用于所有示例测试
class TestObject { private $id; private $name; private $age; private $birthdate; public function __construct($id, $name, $age, $birthdate = NULL) { $this->id = $id; $this->name = $name; $this->age = $age; } public function getId() { return $this->id; } public function getName() { return $this->name; } public function getAge() { return $this->age; } public function getBirthDate() { return $this->birthdate; } }
基本用法
如果我们想渲染 TestObject 集合的表格,则执行以下操作
$data = [ new TestObject(1, 'John', 38), new TestObject(2, 'Susane', 35), new TestObject(3, 'Paul', 13), new TestObject(4, 'Joe', 25), new TestObject(5, 'Lucia', 80), new TestObject(6, 'Štěpán', 29, '1989-03-23'), ]; $table = \Vkrtecek\Table\Table::create($data) ->addColumn('ID of person')->setContent('id') ->addColumn('Name')->setContent('name') ->addColumn('Age')->setContent('age');
通过 setContent()
传递的字符串必须与属性的 getter 签名相同,但没有 get
。例如,如果 TestObject 有 getAge()
方法,则 setContent()
必须传递字符串 'age'
或 'Age'
。
然后在您的视图中调用
<style> <?= $table->renderCSS(); ?> </style> . . . <body> <?= $table->renderHTML(); ?> </body>
或
$table->renderHTML(['css' => true]);
因此,结果将如下所示
高级
回调函数
我们可以指定一个回调函数而不是属性名
$table->addColumn('Name')->setContent(function (TestObject $obj) { return '<em class="red">' . $obj->getName() . '</em>'; });
排序和过滤表格数据
有时我们需要按某些属性排序数据
$table->addColumn('Name')->setOrderable()->setContent('name');
现在,通过单击表头列,我们可以按此列排序行。或者,通过传递一个可调用的参数给 setOrderable()
来指定排序样式。
在以下代码下方输入过滤特定列数据的字段
$table->addColumn('Name')->setSearchable()->setContent('name');
如果我们不想显示所有行并启用分页,这将渲染行数的输入框
$table->enableListing();
列类
列可以有它自己的 HTML 类
$table->addColumn('ColName')->setClass('red');
列过滤
对于单个列的过滤,还有一个方法 setSoloSearchable()
,它传递一个字符串 - URL 属性
$table->addColumn('Name')->setSoloSearchable('url_name')->setContent('name');
在执行任何表操作后,URL 将显示为 http://my_Server/?...url_name=<value>
,对于日期列也是如此。
$table->addColumn('Name')->setDateFromToSearchable('url_from', 'url_to')->setContent('birthade');
对于按 "日期范围" 过滤列,URL 将如下所示:http://my_Server/?...url_from=<val_from>&url_to=<val_to>
。
如果设置了这些过滤器之一,则将在表格上方出现显示/隐藏导航行的按钮。如果单击 "SHOW" 按钮,导航行将作为第二个 THEAD 行出现。
附加
如果我们想按框架(例如 QueryBuilder)排序和过滤数据,并将过滤后的结果集传递给表格,请调用
$table = Table::create($rows)->setTotalItemCount(count($rows));
表格将跳过排序、过滤和分页。此整数值也是列表中页数的计数,因此请插入正确的数字。
如果需要自定义 URL,请使用以下方法 setNavigationNames
$table->setNavigationNames([ 'limit' => 'cust_limit', 'orderBy' => 'cust_order_by', 'order' => 'cust_order', 'page' => 'cust_page', 'pattern' => 'cust_pattern', 'url' => 'my_Server' ])
这将导致在执行某些表格点击操作后,URL 将如下所示:http://my_Server/?cust_order_by=Name&cust_order=ASC&cust_limit=5&cust_page=1&cust_pattern=
表格现在是多语言的,您可以通过传递自己的翻译
$table->renderHTML([ 'translations => [ 'Show navigation bar' => [string], //button content 'Hide navigation bar' => [string], //button content 'Search by' => [string], //above table input's content 'From' => [string], //in navigation row for dates 'To' => [string], //in navigation row for dates 'pattern' => [string], //in navigation row for string searches 'of' => [string], //in status bar (1 - 15 of 365) ] ]);