bajzany/table

此包最新版本(v3.0.7)没有可用的许可信息。

Nette 框架的表格

安装: 684

依赖: 0

建议: 0

安全: 0

星标: 1

关注者: 1

分支: 0

类型:扩展

v3.0.7 2019-12-17 18:04 UTC

README

Nette 表格,用于基础或 DoctrineEntity

要求

安装

  • 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)
	{
	}

}