Amigable paginador Symfony para paginar todo
Generalmente, este paquete se basa en el componente Knp Pager. Este componente introduce una forma diferente de manejo de la paginación. Puede leer más sobre la lógica interna en el enlace de documentación proporcionado.
Nota: Mantenga los componentes knp sincronizados con este paquete. Si desea utilizar una versión anterior de KnpPaginatorBundle, utilice etiquetas v3.0 o v4.X en el repositorio que sean adecuadas para paginar consultas ODM MongoDB y ORM 2.0.
Para obtener detalles sobre los cambios, lea sobre los lanzamientos.
>=4.4
.>=6.4
.>=3.0
si utiliza el motor de plantillas Twig. Nota: el uso de varios paginadores requiere configurar el alias para mantener parámetros no conflictivos.
composer require knplabs/knp-paginator-bundle
Si no usa flex (debería hacerlo), debe habilitar manualmente el paquete:
// app / AppKernel . php
public function registerBundles ()
{
return [
// ...
new Knp Bundle PaginatorBundle KnpPaginatorBundle (),
// ...
];
}
Puede configurar nombres y plantillas de parámetros de consulta predeterminados, y algunas otras opciones:
knp_paginator :
convert_exception : false # throw a 404 exception when an invalid page is requested
page_range : 5 # number of links shown in the pagination menu (e.g: you have 10 pages, a page_range of 3, on the 5th page you'll see links to page 4, 5, 6)
remove_first_page_param : false # remove the page query parameter from the first page link
default_options :
page_name : page # page query parameter name
sort_field_name : sort # sort field query parameter name
sort_direction_name : direction # sort direction query parameter name
distinct : true # ensure distinct results, useful when ORM queries are using GROUP BY statements
filter_field_name : filterField # filter field query parameter name
filter_value_name : filterValue # filter value query parameter name
page_out_of_range : ignore # ignore, fix, or throwException when the page is out of range
default_limit : 10 # default number of items per page
template :
pagination : ' @KnpPaginator/Pagination/sliding.html.twig ' # sliding pagination controls template
rel_links : ' @KnpPaginator/Pagination/rel_links.html.twig ' # <link rel=...> tags template
sortable : ' @KnpPaginator/Pagination/sortable_link.html.twig ' # sort link template
filtration : ' @KnpPaginator/Pagination/filtration.html.twig ' # filters template
// config / packages / paginator . php
<?php declare (strict_types= 1 );
use Symfony Component DependencyInjection Loader Configurator ContainerConfigurator ;
return static function ( ContainerConfigurator $ configurator ): void
{
$ configurator -> extension ( ' knp_paginator ' , [
' convert_exception ' => false , // throw a 404 exception when an invalid page is requested
' page_range ' => 5 , // number of links shown in the pagination menu ( e . g : you have 10 pages , a page_range of 3 , on the 5 th page you ' ll see links
' remove_first_page_param ' => false , // remove the page query parameter from the first page link
' default_options ' => [
' page_name ' => ' page ' , // page query parameter name
' sort_field_name ' => ' sort ' , // sort field query parameter name
' sort_direction_name ' => ' direction ' , // sort direction query parameter name
' distinct ' => true , // ensure distinct results , useful when ORM queries are using GROUP BY statements
' filter_field_name ' => ' filterField ' , // filter field query parameter name
' filter_value_name ' => ' filterValue ' // filter value query parameter name
'page_out_of_range' => 'ignore', // ignore , fix , or throwException when the page is out of range
' default_limit ' => 10 // default number of items per page
],
' template ' => [
' pagination ' => ' @KnpPaginator/Pagination/sliding.html.twig ' , // sliding pagination controls template
' rel_links ' => ' @KnpPaginator/Pagination/rel_links.html.twig ' , // < link rel = ... > tags template
' sortable ' => ' @KnpPaginator/Pagination/sortable_link.html.twig ' , // sort link template
' filtration ' => ' @KnpPaginator/Pagination/filtration.html.twig ' // filters template
]
]);
};
Eso podría usarse de forma inmediata en la clave knp_paginator.template.pagination
:
@KnpPaginator/Pagination/sliding.html.twig
(por defecto)@KnpPaginator/Pagination/bootstrap_v5_pagination.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v4_pagination.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v3_pagination.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_pagination.html.twig
@KnpPaginator/Pagination/foundation_v6_pagination.html.twig
@KnpPaginator/Pagination/foundation_v5_pagination.html.twig
@KnpPaginator/Pagination/bulma_pagination.html.twig
@KnpPaginator/Pagination/semantic_ui_pagination.html.twig
@KnpPaginator/Pagination/materialize_pagination.html.twig
@KnpPaginator/Pagination/tailwindcss_pagination.html.twig
@KnpPaginator/Pagination/uikit_v3_pagination.html.twig
Eso podría usarse de forma inmediata en la clave knp_paginator.template.rel_links
:
@KnpPaginator/Pagination/rel_links.html.twig
(por defecto) Eso podría usarse de inmediato en la clave knp_paginator.template.sortable
:
@KnpPaginator/Pagination/sortable_link.html.twig
(por defecto)@KnpPaginator/Pagination/bootstrap_v5_bi_sortable_link.html.twig
@KnpPaginator/Pagination/bootstrap_v5_fa_sortable_link.html.twig
@KnpPaginator/Pagination/bootstrap_v5_md_sortable_link.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v3_sortable_link.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v4_font_awesome_sortable_link.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v4_material_design_icons_sortable_link.html.twig
@KnpPaginator/Pagination/semantic_ui_sortable_link.html.twig
@KnpPaginator/Pagination/uikit_v3_sortable.html.twig
Eso podría usarse de forma inmediata en la clave knp_paginator.template.filtration
:
@KnpPaginator/Pagination/filtration.html.twig
(por defecto)@KnpPaginator/Pagination/bootstrap_v5_filtration.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v4_filtration.html.twig
Actualmente el paginador puede paginar:
array
DoctrineDBALQueryQueryBuilder
DoctrineORMQuery
DoctrineORMQueryBuilder
DoctrineODMMongoDBQueryQuery
DoctrineODMMongoDBQueryBuilder
DoctrineODMPHPCRQueryQuery
DoctrineODMPHPCRQueryBuilderQueryBuilder
DoctrineCommonCollectionArrayCollection
: cualquier colección de relaciones de Doctrine que incluyaModelCriteria
- Consulta ORM de PropelSolarium_Client
y Solarium_Query_Select
como elementos // App Controller ArticleController . php
public function listAction ( EntityManagerInterface $ em , PaginatorInterface $ paginator , Request $ request )
{
$ dql = " SELECT a FROM AcmeMainBundle:Article a " ;
$ query = $ em -> createQuery ( $ dql );
$ pagination = $ paginator -> paginate (
$ query , / * query NOT result * /
$ request -> query -> getInt ( ' page ' , 1 ), / * page number * /
10 / * limit per page * /
);
// parameters to template
return $ this -> render ( ' article/list.html.twig ' , [ ' pagination ' => $ pagination ]);
}
<head>
: {# rel links for pagination #}
{{ knp_pagination_rel_links( pagination ) }}
<body>
: {# total items count #}
< div class = " count " >
{{ pagination . getTotalItemCount }}
</ div >
< table >
< tr >
{# sorting of properties based on query components #}
< th >{{ knp_pagination_sortable( pagination , ' Id ' , ' a.id ' ) }}</ th >
< th {% if pagination. isSorted ( ' a.title ' ) %} class = " sorted " {% endif %}>
{{ knp_pagination_sortable( pagination , ' Title ' , ' a.title ' ) }}
</ th >
< th {% if pagination. isSorted ([ ' a.date ' , ' a.time ' ]) %} class = " sorted " {% endif %}>
{{ knp_pagination_sortable( pagination , ' Release ' , [ ' a.date ' , ' a.time ' ]) }}
</ th >
</ tr >
{# table body #}
{% for article in pagination %}
< tr {% if loop . index is odd %} class = " color " {% endif %}>
< td >{{ article . id }}</ td >
< td >{{ article . title }}</ td >
< td >{{ article . date | date ( ' Y-m-d ' ) }}, {{ article . time | date ( ' H:i:s ' ) }}</ td >
</ tr >
{% endfor %}
</ table >
{# display navigation #}
< div class = " navigation " >
{{ knp_pagination_render( pagination ) }}
</ div >
Por traducir el siguiente texto:
%foo% name
con clave de traducción table_header_name
. La traducción está en el dominio messages
.{0} No author|{1} Author|[2,Inf] Authors
con clave de traducción table_header_author
. La traducción está en el dominio messages
.TranslationCount y TranslationParameters se pueden combinar.
< table >
< tr >
{# sorting of properties based on query components #}
< th >{{ knp_pagination_sortable( pagination , ' Id ' | trans({ foo : ' bar ' }, ' messages ' ), ' a.id ' ) | raw }}</ th >
< th {% if pagination. isSorted ( ' a.Title ' ) %} class = " sorted " {% endif %}>{{ knp_pagination_sortable( pagination , ' Title ' , ' a.title ' ) | raw }}</ th >
< th >{{ knp_pagination_sortable( pagination , ' Author ' | trans({}, ' messages ' ), ' a.author ' ) | raw }}</ th >
</ tr >
<!-- Content of the table -->
</ table >
También puede anular las traducciones creando un archivo de traducción con el siguiente formato de nombre: domain.locale.format
. Entonces, para crear un archivo de traducción para este paquete, necesita crear, por ejemplo, el archivo KnpPaginatorBundle.tr.yaml
en project_root/translations/
y agregar sus traducciones allí:
label_previous : " Önceki "
label_next : " Sonraki "
filter_searchword : " Arama kelimesi "
Si establece la traducción predeterminada para la configuración en consecuencia:
framework :
default_locale : tr
Symfony lo seleccionará automáticamente.
Puede inyectar automáticamente un servicio paginador en otro servicio utilizando la etiqueta DIC knp_paginator.injectable
. La etiqueta toma un argumento opcional paginator
, que es el ID del servicio paginador que se debe inyectar. El valor predeterminado es knp_paginator
.
La clase que recibe el servicio KnpPaginator debe implementar KnpBundlePaginatorBundleDefinitionPaginatorAwareInterface
. Si eres demasiado vago, también puedes extender la clase base KnpBundlePaginatorBundleDefinitionPaginatorAware
.
Se desaconseja el uso de
PaginatorAwareInterface
y podría eliminarse en una versión futura. No debe confiar en la inyección del setter, sino sólo en la inyección del constructor adecuada. Usar el mecanismo de cableado automático integrado de Symfony es el camino sugerido a seguir.
El servicio knp_paginator
se creará de forma diferida si está instalado el paquete symfony/proxy-manager-bridge
.
Para obtener más información sobre los servicios diferidos, consulte la documentación de Symfony sobre inyección de dependencia.
<? xml version = " 1.0 " ?>
< container xmlns = " http://symfony.com/schema/dic/services "
xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : schemaLocation = " http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd " >
< parameters >
< parameter key = " my_bundle.paginator_aware.class " >MyBundleRepositoryPaginatorAwareRepository</ parameter >
</ parameters >
< services >
< service id = " my_bundle.paginator_aware " class = " my_bundle.paginator_aware.class " >
< tag name = " knp_paginator.injectable " paginator = " knp_paginator " />
</ service >
</ services >
</ container >
framework :
translator : { fallbacks: ['%locale%'] }
translations/KnpPaginatorBundle.en.yml
(sustituya "en" por su propio código de idioma si es necesario). Luego agregue estas líneas: label_next : Next
label_previous : Previous
<rel>
solo son significativos cuando se usa la paginación, no son relevantes para ordenar o filtrar. Por favor lea esta publicación primero.
Esta biblioteca es mantenida por las siguientes personas (ordenadas alfabéticamente):