vkrtecek/table

基本表格构建器。

v1.1.5 2019-01-23 09:44 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:08:38 UTC


README

License

该库专注于对象数组的简单表格渲染。无数据库连接,仅插入数组。

许可

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)
    ]
]);