avpretty / grid-bundle
允许您以表格的形式快速显示任何实体或数组的数据。
Requires
- php: >=5.5.0
- symfony/dependency-injection: ~2.3|~3.0
- symfony/framework-bundle: ~2.3|~3.0
- twig/twig: ~1.12|~2
This package is auto-updated.
Last update: 2024-08-25 18:37:09 UTC
README
概述
允许您以表格的形式快速显示任何实体或数组的数据。此表格已包含筛选、排序和分页。
安装
在项目中执行以下控制台命令来安装 GridBundle
$ composer require avpretty/grid-bundle
更新您的 AppKernel.php
$bundles = [ new AV\GridBundle\AVGridBundle(), ];
GridBundle 包含 js
和 css
,您需要手动包含它们。要使用下面的代码示例,必须安装 AsseticBundle
{% block stylesheets %} {% stylesheets '@AVGridBundle/Resources/public/css/grid-view.css' %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %} ... {% block javascripts %} {% javascripts '@AVGridBundle/Resources/public/js/grid-view.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} {% endblock %}
注意:GridBundle
使用 bootstrap 框架和 jQuery。
网格视图
GridView
是主要的组件,允许您创建和管理网格。每个实体或数组的每个网格都需要新的 GridView
实例。
创建新网格的最短方式
// IN YOUR CONTROLLER $em = $this->getDoctrine()->getManager(); $dataSource = $this->get('av_grid.query_data_source') ->setEntityName(User::class)->setRootAlias('u') ->setDataSource($em->getRepository('User')->createQueryBuilder('u')); $gridData = [ 'dataSource' => $dataSource, ]; return $this->render('index.html.twig', [ 'paginationInstance' => $dataSource->getPagination(), 'gridView' => $this->get('av_grid.grid_view_factory') ->prepareGridView($gridData), ]);
并更新您的模板
{{ gridView(gridView) }} {{ gridPagination(paginationInstance) }}
完成!
GridViewBundle
为配置网格提供了很多选项。排序、筛选、分页和列选项的详细说明在文档的相应部分中。
扩展示例
$gridData = [ 'dataSource' => $dataSource, 'filterEntity' => new User, 'tableCaption' => 'Users', 'emptyCell' => 'no data', 'columns' => [ [ 'label' => 'User ID', 'attributeName' => 'id' ], [ 'label' => 'User Full Name', 'content' => function($userEntity, $rowIndex) { return $userEntity->getFirstName().' '.$userEntity->getLastName(); } ], [ 'attributeName' => 'created', 'filterType' => DateType::class, 'filterFieldOptions' => [ 'widget' => 'single_text' ] ] ] ]; return $this->render('index.html.twig', [ 'paginationInstance' => $dataSource->getPagination(), 'gridView' => $this->get('av_grid.grid_view_factory') ->prepareGridView($gridData), ]);
GridView
选项:网格筛选选项
dataSource
- 为网格提供数据。应实现BaseDataSource
接口。- 类型:
BaseDataSource
- 必需:是
- 类型:
containerOptions
- 将应用于网格容器的 HTML 属性列表。- 类型:
array
- 必需:否
- 示例:
['containerOptions' => ['data-type' => 'grid-container', 'class' => 'outer']]
- 类型:
tableOptions
- 将应用于网格表格的 HTML 属性列表。在这里,您可以覆盖表格的 CSS 样式。- 类型:
array
- 必需:否
- 示例:
['tableOptions' => ['class' => 'table table-hover']]
- 类型:
tableCaption
- 网格表格标题。- 类型:
string
- 必需:否
- 示例:
['tableCaption' => 'Table Caption']
- 类型:
showHeader
- 是否显示表格标题行。- 类型:
bool
- 必需:否
- 类型:
headerRowOptions
- 将应用于网格表格标题行的 HTML 属性列表。- 类型:
array
- 必需:否
- 类型:
rowOptions
- 网格表格行的选项。- 类型:
array
- 必需:否
- 类型:
filterRowOptions
- 包含筛选器的行的 HTML 属性列表。- 类型:
array
- 必需:否
- 类型:
emptyCell
- 将用于空表格单元格的值。- 类型:
string
- 必需:否
- 类型:
filterEntity
- 用于创建筛选字段的目标实体实例。- 类型:
object
- 必需:否
- 类型:
filterUrl
- 接受筛选数据的目标 URL。默认情况下将使用当前路由。- 类型:
string
- 必需:否
- 类型:
嵌套网格
您可以将一个网格插入到另一个网格中。为此,您需要手动渲染嵌套网格。
// IN CONTROLLER $ext = $this->get('twig')->getExtension(GridExtension::class); $nestedGridData = [ 'dataSource' => $nestedGridDataSource, ]; $renderedNestedGrid = $ext->prepareGridView( $gridFactory->prepareGridView($nestedGridData) ); $gridData = [ 'dataSource' => $dataSource, 'filterEntity' => new User, 'tableCaption' => 'Users', 'emptyCell' => 'no data', 'columns' => [ ... [ 'content' => function($entity, $rowIndex) use ($renderedNestedGrid) { return $renderedNestedGrid; } 'format' => ColumnFormat::RAW_FORMAT ] ] ]; return $this->render('index.html.twig', [ 'paginationInstance' => $dataSource->getPagination(), 'gridView' => $this->get('av_grid.grid_view_factory') ->prepareGridView($gridData), ]);
网格过滤器
默认情况下,网格筛选器是禁用的。要启用它们,请将以下代码添加到您的网格配置中
$userEntity = new User; $gridData = [ 'filterEntity' => $userEntity, ... ];
指定实体实例,允许您构建筛选字段。
默认情况下,将为每个实体属性创建过滤器字段。但您也可以为自定义列添加过滤器字段。
示例
$gridData = [ 'filterEntity' => $userEntity, 'dataSource' => $dataSource, 'columns' => [ [ 'label' => 'User Name', 'attributeName' => 'name', 'filterType' => TextType::class, ] ], ];
注意:如果您没有指定过滤器类型,symfony将尝试猜测它。关于这一点,您可能会得到一个错误 无法转换属性路径...
。这个错误的主要原因是因为doctrine字段验证,所以有两个选项:手动指定过滤器类型,如上所示,或者删除验证。
您可以在symfony的表单文档中找到所有可用的过滤器类型以及过滤器选项。
在使用ArrayDataSource
的情况下,您仍然需要指定过滤器实体(任何实体)。
网格过滤器选项
filterEntity
- 用于构建过滤器表单的实体实例。- 类型:
object
- 示例:
'filterEntity' => new User,
- 类型:
filterUrl
- 接受筛选数据的目标 URL。默认情况下将使用当前路由。- 类型:
string
- 示例:
'filterUrl' => 'custom-url'
- 类型:
完整示例 对于User
实体。我们有以下字段:firstName
、lastName
和created
。现在在UserRepository
中创建一个search
方法
... public function search(array $searchParams) { $queryBuilder = $this->createQueryBuilder('u'); if (!$searchParams) { return $queryBuilder; } $firstName = $searchParams['firstName']; $lastName = $searchParams['lastName']; $created = $searchParams['created']; // Date foramt - Y-m-d (in our case) if ($firstName) { $queryBuilder->andWhere('u.firstName LIKE :firstName') ->setParameter(':firstName', '%'.$firstName.'%'); } if ($lastName) { $queryBuilder->andWhere('u.lastName LIKE :lastName') ->setParameter(':lastName', '%'.$lastName.'%'); } // I'm sure you'll have time to write code better than this if ($created) { $queryBuilder->andWhere('u.created BETWEEN :start AND :end') ->setParameter(':start', $created) ->setParameter( ':end', (new \DateTime($created))->modify('+1 day')->format('Y-m-d') ); } return $queryBuilder; } ...
现在让我们在Controller
中描述我们的过滤器
$gridFactory = $this->get('av_grid.grid_view_factory'); /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); $dataSource = $this->get('av_grid.query_data_source') ->setEntityName(User::class) ->setRootAlias('u'); $dataSource->setDataSource( $em->getRepository('User')->search($request->get('User')) ); $gridData = [ 'filterEntity' => new User, 'dataSource' => $dataSource, ]; ... // render template
现在将显示过滤器表单,您可以处理传入的过滤器数据。
带有关系的过滤器
您还可以将过滤器应用于相关实体。例如,我们将使用User
实体和相关Country
实体。让我们创建一个按国家筛选的下拉列表。
注意!!!:要能够在相关实体上使用过滤功能,您应该在您的查询构建器中指定这些实体。不要使用代理对象。
示例
[ 'attributeName' => 'country', 'content' => function($userEntity, $rowIndex) { return $entity->getCountry()->getTitle(); }, 'filterType' => EntityType::class, 'filterFieldOptions' => [ 'class' => Country::class, 'choice_label' => 'title' ] ],
对上述示例的一些解释:attributeName
是必填的,其值应在User
实体中指定。您还可以指定任意attributeName
的值,但是除非您将该字段添加到目标(User
)实体中,否则表单字段将不会记住所选的过滤器值。
列
列提供了一种简单的接口来控制网格内的数据显示。有三种类型的列和一个基本接口BaseColumn
列
操作列
计数器列
负责在网格中渲染常见数据。此类列显示所有用户数据,如实体或数组。用户可以自定义一系列显示选项。
例如,我们将使用User
实体的QueryDataSource
。我们的实体包含以下字段:firstName
、lastName
、age
、email
和created
。
简单示例
// To just display all fields of entity you can omit column configuration 'columns' => [ ['attributeName' => 'firstName'], ['attributeName' => 'lastName'], ['attributeName' => 'age'], ['attributeName' => 'email'], ['attributeName' => 'created'], ]
注意:如果我们省略column
配置,结果将相同。
在使用关系的情况下,您可以使用以下语法
'columns' => [ [ 'label' => 'User Country' 'content' => function($userEntity, $rowIndex) { return $userEntity->getCountry()->getTitle(); } ] ] OR YOU CAN USE SHORT SYNTAX 'columns' => [ [ 'attributeName' => 'country.title' ] ]
扩展示例
'columns' => [ [ 'label' => 'User Name' 'sortable' => false 'attributeName' => 'firstName', 'filterType' => EntityType::class, 'filterFieldOptions' => [ 'class' => User::class, 'choice_label' => 'firstName', 'placeholder' => 'Select name', ] ], [ 'label' => 'User Last Name' 'attributeName' => 'lastName' ], [ 'attributeName' => 'fullName' 'content' => function($userEntity, $rowIndex) { return $userEntity->getFirstName() . ' ' . $userEntity->getLastName(); }, 'filterType' => TextType::class, 'filterFieldOptions' => [ 'mapped' => false ] ], [ 'attributeName' => 'created', 'format' => [ColumnFormat::DATE_FORMAT => 'Y-m-d'] ], [ 'attributeName' => 'email', 'visible' => function() use ($someExternalObject) { return // some permission check logic } ], [ 'label' => 'Custom column', 'content' => function($userEntity) use ($someEntity) { return $someEntity->getDataByUserId($userEntity->getId()); }, 'contentOptions' => ['width' => '100px'] ] ]
列选项
attributeName
- 实体字段名称或使用ArrayDataSource
时的键名称。- 类型:
string
- 示例:
'attributeName' => 'lastName'
- 必需:如果没有
content
值,则为是。
- 类型:
label
- 列表头标签。如果没有指定,则使用attributeName
。- 类型:
string
- 示例:
'label' => '列标签'
- 必需:如果没有
attributeName
值,则为是。
- 类型:
encodeLabel
- 是否对标题进行编码。默认为False。- 类型:
string
- 示例:
'encodeLabel' => true
- 必需:否
- 类型:
content
- 列单元格内容。此参数可以包含字符串值或回调函数。- 类型:
string|callable
- 示例:
'content' => '自定义字符串内容'
。回调函数示例已在上文展示。 - 必需:否
- 类型:
contentOptions
- 应用到内容单元格的选项列表。- 类型:
array|callable
- 示例:
'contentOptions' => ['width' => '100px']
- 必需:否
- 类型:
format
- 列单元格数据的格式。默认为ColumnFormat::TEXT_FORMAT
- 类型:
string
- 示例:
'contentOptions' => ['width' => '100px']
- 必需:否
- 类型:
visible
- 是否使列可见。参数可以接受布尔值或可调用函数。- 类型:
bool|callable
- 示例:
'visible' => false
- 必需:否
- 类型:
sortable
- 列是否可排序。- 类型:
bool
- 示例:
'sortable' => false
- 必需:否
- 类型:
filterType
- 过滤输入字段类型。可以应用 Symfony 表单输入 类型 之一。- 类型:
string
- 示例:
'filterType' => EmailType::class
- 必需:否
- 类型:
filterFieldOptions
- 将应用于过滤输入字段的选项列表。文本字段类型 选项- 类型:
array
- 必需:否
- 类型:
filterOptions
- 将应用于过滤单元格的选项列表。- 类型:
array
- 示例:
'filterOptions' => ['class' => 'custom-filter-cell-class']
- 必需:否
- 类型:
提供表格行的简单计数器。对于数据源 QueryDataSource
和 ArrayDataSource
都默认包含。
继承数据列的大部分属性。
示例
'columns' => [ [ 'service' => 'av_grid.counter_column', 'label' => 'My Custom Label' // # by default ] ]
操作列允许为每个网格行创建控制按钮。目前有两种按钮类型: show
、edit
。每个按钮均可配置。如果你使用的是 QueryDataSource
,则默认包含 Action columns
;否则,应手动指定。
注意:默认情况下,所有操作按钮都将可见,并使用当前路由。无需手动指定每个按钮。它们将默认显示。
示例
'columns' => [ [ // Custom configuration 'service' => 'av_grid.action_column', 'buttons' => [ ActionColumn::SHOW => 'http://custom-url.com' ActionColumn::EDIT => function ($entity, $url) use ($router) { return $router->generate('compaign_show', ['id' => 4]); }, ], 'hiddenButtons' => [ ActionColumn::EDIT => function ($entity, $url) { return $entity->getId() == 5; // If true then won't be shown } ] ] ]
每个按钮有两个可配置的选项: url
、visibility
。这两个选项都接受标量值和回调函数。
如果你使用回调函数,则有两个可用参数
- 实体实例
- 默认按钮 URL
buttons
和 hiddenButtons
值是可选的。默认情况下,URL 创建将使用当前路由的 show
路径和 edit
。
例如,如果当前 URL 是 .../admin/user/
,则对于 show
按钮将生成以下 URL .../admin/user/{userId}/show
,直到你更改它。
列数据格式
此组件允许将不同的格式类型应用于 Column
数据。有四种可用的格式
ColumnFormat::TEXT_FORMAT
- 默认列单元格数据格式。对所有html
、js
或twig
实体进行编码。ColumnFormat::RAW_FORMAT
- 不进行任何编码。可以用于将一些html
或js
应用到列单元格数据。ColumnFormat::TWIG_FORMAT
- 允许使用任何twig
构造。ColumnFormat::DATE_FORMAT
- 日期格式化。目前可以格式化的日期格式有两种:timestamp (int|string)
、\DateTime
、\DateInterval
。
示例
'columns' => [ [ 'label' => 'Plain text' 'content' => function ($entity) { return '<script>alert("hello");</script>'; // will be displayed as plain text }, ], [ 'label' => 'Execute JS' 'content' => function ($entity) { return '<script>alert("hello");</script>'; // alert message will be shown }, 'format' => ColumnFormat::RAW_FORMAT, ], [ 'label' => 'Format timestamp' 'content' => function($entity) { // return $entity->getCreated(); // returns \DateTime // return '1484204985'; // simple timestamp }, 'format' => [ColumnFormat::DATE_FORMAT => 'Y-m-d'] ] [ 'label' => 'Twig construction' 'content' => function($entity) { return "{{ 'CUSTOM TEXT'|lower }}"; }, 'format' => ColumnFormat::FORMAT ] ]
数据源
此实体在 grid
和数据源之间充当中介。正是此组件创建最终的查询并将执行结果传递给工作于 BaseDataSource
接口的 grid
组件。
有两个实体实现了 BaseDataSource
- QueryDataSource
- ArrayDataSource
QueryDataSource
QueryDataSource
允许将你的 QueryBuilder
实例传递给网格。示例
// Get user entity query builder $queryBuilder = $entityManager->getRepository('User')->createQueryBuilder('u'); // Initialize data source $dataSource = $this->get('av_grid.query_data_source') ->setDataSource($queryBuilder) ->setRootAlias('u'); // Read below about root alias // Create custom pagination. OPTIONAL $pagination = $this->get('av_grid.pagination') ->setPageSize(5) ->setTotalCount(50); // Create custom sort. OPTIONAL $sortAttributes = [ 'u.email', // Custom configuration 'name' => [ Sort::ASC => [ 'u.first_name' => Sort::ASC, 'u.last_name' => Sort::ASC ], Sort::DESC => [ 'u.first_name' => Sort::DESC, 'u.last_name' => Sort::DESC ], ], ] $sort = $this->get('av_grid.sort')->setAttributes($sortAttributes); $dataSource->setPagination($pagination)->setSort($sort);
注意:对于 QueryDataSource
,无需手动配置排序和分页。每个 BaseDataSource
实例都是使用默认参数创建的,包含排序和分页。例如,如果我们没有指定排序参数,则 User
实体的所有字段都将可排序。
现在我们可以使用 fetchEntities
获取具有排序和分页设置的 user
实体。
// Get all user entities $dataSource->fetchEntities(); // Get entities total count even if we did not call `setTotalCount` of pagiantion component $dataSource->getTotalCount();
注意:如上所述,我们应该指定实体别名,就像我们对 User
所做的那样。关于这一点,我们应该始终为 QueryDataSource
指定实体别名。如果您不这样做,则别名将从实体名称中获取,并将是 User
。这样做的原因是默认排序配置需要知道完整的字段名称。另一方面,您将使用如 JOIN
之类的构造。
ArrayDataSource
ArrayDataSource
允许将您的数组数据传递到网格。
示例
// Get user entity query builder $userData = [ ['first_name' => 'John', last_name => 'Doe', 'email' => 'john_doe@mail.com'], ['first_name' => 'Jane', last_name => 'Doe', 'email' => 'jane_doe@mail.com'], ['first_name' => 'Mike', last_name => 'Doe', 'email' => 'mike_doe@mail.com'], ]; // Initialize data source $dataSource = $this->get('av_grid.array_data_source') ->setDataSource($userData); // Create custom pagination. OPTIONAL ... // Create custom sort. OPTIONAL ... $sort = $this->get('av_grid.sort')->setAttributes($sortAttributes); $dataSource->setPagination($pagination)->setSort($sort);
现在我们可以将我们的 $dataSource
传递给网格,它将被适当地显示。
注意:我们没有为排序设置别名 u
,如 QueryDataSource
的情况。当我们使用 ArrayDataSource
时,应仅使用数组键。
排序
排序组件允许您灵活地为特定属性设置和扩展排序参数。您可以使用此组件与数据源组件之一(QueryDataSource
或 ArrayDataSource
)一起使用。
假设我们有一个具有以下字段的 User
实体
- firstName
- lastName
示例
$dataSource = $this->get('av_grid.data_source'); $dataSource->setDataSource( $entityManager->getRepository('User')->createQueryBuilder('u') ); // Simple example $sortAttributes = [ 'u.email', 'u.first_name' 'u.last_name' ] // Extended example: sorting by multiple fields $sortAttributes = [ // Default sort params will be used 'u.email', // Custom configuration 'name' => [ Sort::ASC => [ 'u.first_name' => Sort::ASC, 'u.last_name' => Sort::ASC ], Sort::DESC => [ 'u.first_name' => Sort::DESC, 'u.last_name' => Sort::DESC ], 'default' => Sort::DESC, 'label' => 'Name', ], ] $sort = $this->get('av_grid.sort')->setAttributes($sortAttributes); $dataSource->setSort($sort);
如果没有指定参数的属性名称,则将使用默认参数。下一个示例显示了 email
属性是如何被解释的。
[ 'u.email' => [ Sort::ASC => ['u.email' => Sort::ASC], Sort::DESC => ['u.email' => Sort::DESC], ], ]
在配置中使用的属性名称是如果使用 QueryDataSource
,则实体字段名称,如果使用 ArrayDataSource
,则是数组键名称。
注意:在扩展属性配置中,我们使用了自定义字段标题 name
,但使用了指定的别名 u
来指定可排序字段。在短记法的情况下,我们应该指定实体别名,就像我们在 u.email
中所做的那样。
属性选项
Sort::ASC
- 升序排序配置。此参数定义按一个或多个属性排序。尽管此参数定义了升序排序,但允许对任何属性使用两种类型的排序。- 类型:
array
- 必需:否
- 示例:
Sort::ASC => ['first_name' => Sort::ASC, 'last_name' => Sort::ASC]
- 类型:
Sort::DESC
- 查看Sort::ASC
- 类型:
array
- 必需:否
- 示例:
Sort::DESC => ['first_name' => Sort::DESC, 'age' => Sort::ASC]
- 类型:
default
- 默认排序参数。此排序类型将默认使用。- 类型:
string
- 必需:否
- 示例:
['default' => Sort::DESC]
- 类型:
label
- 用于请求字符串的属性名称。如果未定义标签,则将使用属性名称。- 类型:
string
- 必需:否
- 示例:
['label' => 'FullName']
- 类型:
还有几个可以配置的 Sort
实例的附加参数
sortParam
- 包含查询字符串中排序数据的参数名称。此参数可以更改以允许在单个页面上使用多个排序实例。默认值为sort
。- 类型:
string
- 示例:
$sortInstance->setSortParam('customSortParam')
- 类型:
separator
- 用于在查询字符串中分隔排序属性的分隔符。默认值为,
。- 类型:
string
- 必需:否
- 示例:
$sortInstance->setSeparator('.')
- 类型:
defaultOrder
- 默认排序参数。- 类型:
array
- 必需:否
- 示例:
$sortInstance->setDefaultOrder(['email' => Sort::DESC])
- 类型:
关系排序
同样,您还可以根据相关实体的字段进行排序。例如,我们将使用 User
实体和相关 Country
实体。
注意!!!:要能够在相关实体上使用排序,您应该在您的查询构建器中指定这些实体。不要使用代理对象。
示例
$sort = $this->get('av_grid.sort'); $sort->setAttributes([ 'countryTitle' => [ Sort::ASC => ['c.title' => Sort::ASC], Sort::DESC => ['c.title' => Sort::DESC], ] ]); $dataSource->setSort($sort);
对上述示例的某些说明:c
是您应在查询构建器中指定的 Country
实体别名。
分页
分页组件允许您轻松限制页面显示的数据量。此组件由三部分组成
- 分页 - 负责管理
QueryBuilder
的限制和偏移参数。 - PaginationView - 负责构建分页块。同时,此组件生成分页链接。
- PaginationExtension - 用于渲染分页块的 twig 扩展。
分页示例
$pagination = $this->get('av_grid.pagination'); // Set amount of items per page $pagination->setPageSize(3); // Or default value will be used $pagination->setTotalCount(12); // required if used beyond `QueryDataSource` context. // Set custom pagination instance to QueryDataSource and override default QueryDataSource pagination config $dataSource->setPagination($pagination);
使用这些参数,分页组件能够根据查询参数生成限制和偏移的值。
// Let's assume that we have query string: .../admin/user/?per-page=3&page=3 echo $pagination->getLimit(); // 3 echo $pagination->getOffset(); // 6
注意:可能存在名称冲突。例如,您的某个路由已经使用了 page
查询参数名称。在这种情况下,您可以重命名页面参数名称。
$pagination->setPageParam('my-page-counter'); // .../admin/user/?per-page=3&my-page-counter=3
分页选项
pageSize
- 每页的项目数量。- 类型:
int
- 示例:
$pagination->setPageSize(10)
- 必需:否
- 类型:
totalCount
- 项目总数。- 类型:
int
- 必需:是
- 示例:
$pagination->setTotalCount(100)
- 类型:
pageParam
- 包含页面数字的查询参数名称。此参数可以更改,以允许单页上的多个分页块。默认值page
。- 类型:
string
- 必需:否
- 示例:
$pagination->setPageParam('customPageName') // .../?per-page=3&customPageName=3
- 类型:
pageSizeParam
- 包含页面中项目数量的查询参数名称。此参数可以更改,以允许单页上的多个分页块。默认值per-page
。- 类型:
string
- 必需:否
- 示例:
$pagination->setPageSizeParam('customPageSize')
- 类型:
route
- 路由名称。如果未指定路由,则使用当前路由。- 类型:
string
- 必需:否
- 示例:
$pagination->setRoute('post_index')
- 类型:
defaultPageSize
- 默认每页项目数量。如果未指定pageSize
,则将使用此值。默认 20。- 类型:
int
- 必需:否
- 示例:
$pagination->setDefaultPageSize(50)
- 类型:
注意:BaseDataSource
实例已包含分页实例。因此,无需手动指定分页实例并将其设置到 QueryDataSource
或 ArrayDataSource
。相反,将使用默认的分页配置。
要显示分页块,请在模板中调用 twig 扩展
// paginationInstance should be passed to template from controller {{ gridPagination(paginationInstance) }}
gridPagination
扩展可以应用额外的参数。所有参数都是可选的
{{ gridPagination( paginationInstance, { 'options' : {'id': 'pagination-block-id', 'data-id': 'some-id'}, 'linkOptions' : {'class': 'class-for-each-link'}, 'showFirstPageLink' : true, 'showLastPageLink' : true, 'showPrevPageLink' : true, 'showNextPageLink' : true, 'nextPageLabel' : '›', 'prevPageLabel' : '‹', 'firstPageLabel' : '«', 'lastPageLabel' : '»', 'maxButtonCount' : 13, 'activePageCssClass' : 'active', 'disabledPageCssClass': 'disabled', 'firstPageCssClass' : 'first', 'lastPageCssClass' : 'last', 'prevPageCssClass' : 'prev', 'nextPageCssClass' : 'next', } ) }}