bajzany / table
此包最新版本(v3.0.7)没有可用的许可信息。
Nette 框架的表格
v3.0.7
2019-12-17 18:04 UTC
Requires
- php: ^7.2
- bajzany/paginator: ^1.0
- kdyby/doctrine: ^3.3
- kdyby/events: ^3.1
- latte/latte: ^2.4
- nette/application: ^2.4
- nette/bootstrap: ^2.4
- nette/di: ^2.4
- nette/utils: ^2.4
- nettpack/stage: ^1.0
README
Nette 表格,用于基础或 DoctrineEntity
要求
- php: ^7.2
- nette/di
- nette/application
- nette/bootstrap
- latte/latte
- nette/utils
- kdyby/events
- kdyby/doctrine
- bajzany/paginator
- nettpack/stage
安装
- Composer 安装
composer require bajzany/table dev-master
- 注册到 Nette 应用程序
extensions: BajzanyTable: Bajzany\Table\DI\TableExtensions
- 设置表翻译
BajzanyTable: translator: Chomenko\Translator\Translator
-
现在创建组件表及其接口,例如
- ITestTable 类
<?php interface ITestTable { /** * @return TestTable */ public function create(): TestTable; }
- 组件有两个选项,BaseTable 和 EntityTable
BaseTable
- 您必须手动设置数据
$rowsCollection->add()
<?php use Bajzany\Table\RowsCollection; use Bajzany\Table\Table; class TestTable extends Table; { /** * @param RowsCollection $rowsCollection * @throws \Bajzany\Table\Exceptions\TableException */ protected function create(RowsCollection $rowsCollection) { $rowsCollection->add(['failure' => '0', 'emailProbe' => 'a']); $rowsCollection->add(['failure' => '1', 'emailProbe' => 'd']); $this->getPaginator()->setPageSize(4); $this->createColumn("failure") ->setSearchable(TRUE) ->setLabel("Failure") ->setPattern("{{ failure }}") ->setSearchSelectOptions([ '0' => 'Ne', '1' => 'Ano', ]) ->addFilter([$this->filter, "boolLabel"], ["label-danger", "label-success"]); $this->createColumn("emailProbe") ->setSearchable(TRUE) ->setSortable(TRUE) ->setLabel("Email") ->setPattern("{{ emailProbe }}"); } }
EntityTable
- 实体表中的数据已通过 queryBuilder 类似于
getEntityClass()
设置
<?php use Bajzany\Table\EntityTable; use Bajzany\Table\RowsCollection; class TestEntityTable extends EntityTable { /** * @return string */ public function getEntityClass(): string { return EntityClass::class; } public function searchActionFailure(EntityTable $table, $selectValue) { $table->getQueryBuilder()->andWhere("e.failure LIKE :failure") ->setParameter('failure', '%' . $selectValue . '%'); } /** * @param RowsCollection $rowsCollection * @throws \Bajzany\Table\Exceptions\TableException */ protected function create(RowsCollection $rowsCollection) { $this->addSort("e.date", "DESC"); $this->getPaginator()->setPageSize(4); $this->createColumn("failure") ->setSearchable(TRUE) ->setSortable(TRUE) ->setLabel("Failure") ->setPattern("{{ failure }}") ->addFilter([$this->filter, "boolLabel"], ["label-danger", "label-success"]) ->setSearchSelectOptions([ '0' => 'Ne', '1' => 'Ano', ]) ->onSearchAction[] = [$this, 'searchActionFailure']; $this->createColumn("emailProbe") ->setSearchable(TRUE) ->setLabel("Email") ->setPattern("{{ emailProbe }}"); $this->createColumn("statusMessage") ->setLabel("Status") ->setPattern("{{ statusMessage }}"); $this->createColumn("ip") ->setLabel("IP") ->setPattern("{{ ip }}"); $this->createColumn("date") ->setLabel("date") ->setSortable(TRUE) ->setPattern("{{ date }}") ->addFilter([$this->filter, "dateTime"]); $this->createColumn("date") ->useComponent("customComponent") ->onBodyCreate[] = [$this, "dateColumn"]; $this->createColumn("option") ->onBodyCreate[] = [$this, "optionColumn"]; } /** * @param string $name * @param EntityClass $entity */ public function createComponentCustomComponent($name, EntityClass $entity) { return $this->customComponent->create(); } public function optionColumn(Item $item, EntityClass $entity) { } }
-
getEntityClass
函数- 这将返回实体类
-
在 create 函数中,您可以访问分页器
$this->getPaginator()
- 实体表包含 bajzany/paginator,更多详情请点击此 链接
- 您可以更改分页器 pageSize,向列表分页添加其他项。
-
createColumn 函数
- 函数
$this->createColumn('identificator')
在每行中为表格创建新的列 - 列具有以下设置
setLabel(string)
- 标签用于表中的 th 标签,它只是列名
setPattern(string)
- 模式示例(用户电子邮件 {{ email }})这将在字段列“用户电子邮件(特定用户电子邮件)”中显示
setFooter(string)
- 页脚与标签相同,只是位置不同
useComponent("customComponent")
- 用于在表中渲染组件
- 可调用函数
onBodyCreate[] = callable
- 在 Callable 中获取这些参数:项目(HtmlObject),实体
onHeaderCreate[] = callable
- 在 Callable 中获取这些参数:项目(HtmlObject),列
onFooterCreate[] = callable
- 在 Callable 中获取这些参数:项目(HtmlObject),列
onSearchAction[] = callable
- 必须设置
setSearchable(TRUE)
- 为创建选择列表
setSearchSelectOptions([])
- 例如
['0' => 'No','1' => 'Yes']
- 例如
- 在 Callable 中获取这些参数:表格,输入值
- 必须设置
onSortingAction[] = callable
- 必须设置
setSortable(TRUE)
- 在 Callable 中获取这些参数:表格,排序值
- 必须设置
- 实体表还有可调用的
onBuildQuery[]
- 在 Callable 中获取这些参数:实体表,查询构建器
- 函数
-
现在注册到 Presenter
<?php /** * @var ITestEntityTable @inject */ public $testTable; /** * @param IGroupTable $groupTable * @return GroupTable */ public function createComponentTestList(): GroupTable { $table = $testTable->create(); return $table; }
用于渲染表格使用 .latte
<div class="box-body">
{control testList}
</div>
{*Paginator section*}
<div class="box-footer clearfix">
{control testList:paginator}
</div>
用于在表格事件上注册订阅者
- 使用 @Tag 注解注册新的 Table 监听器
{TableExtensions::TAG_EVENT=EntityClass::class}
- EntityClass::class 是可以监听的实体 onBuildQuery(EntityTable $entityTable)
- 这是渲染表格之前将调用的事件,只需更改查询构建器查询以选择特定实体即可
<?php namespace Bundles\User\Model; use Bajzany\Table\EntityTable; use Bajzany\Table\Listener\ITableSubscriber; use Chomenko\AutoInstall\Config\Tag; use Bajzany\Table\DI\TableExtensions; /** * @Tag({TableExtensions::TAG_EVENT=EntityClass::class}) */ class UserTableSubscriber implements ITableSubscriber { public function onBuildQuery(EntityTable $entityTable) { } }