Paginator Symfony yang ramah untuk membuat halaman segalanya
Umumnya bundel ini didasarkan pada komponen Knp Pager. Komponen ini memperkenalkan cara penanganan penomoran halaman yang berbeda. Anda dapat membaca lebih lanjut tentang logika internal pada tautan dokumentasi yang diberikan.
Catatan: Jaga agar komponen knp tetap sinkron dengan bundel ini. Jika Anda ingin menggunakan KnpPaginatorBundle versi lama - gunakan tag v3.0 atau v4.X di repositori yang cocok untuk membuat paginasi kueri ODM MongoDB dan ORM 2.0
Untuk detail mengenai perubahan, silakan baca tentang rilis.
>=4.4
.>=6.4
.>=3.0
diperlukan jika Anda menggunakan mesin templating Twig. Catatan: menggunakan beberapa paginator memerlukan pengaturan alias untuk menjaga parameter tidak bertentangan.
composer require knplabs/knp-paginator-bundle
Jika Anda tidak menggunakan flex (seharusnya), Anda perlu mengaktifkan bundel secara manual:
// app / AppKernel . php
public function registerBundles ()
{
return [
// ...
new Knp Bundle PaginatorBundle KnpPaginatorBundle (),
// ...
];
}
Anda dapat mengonfigurasi nama dan templat parameter kueri default, serta beberapa opsi lainnya:
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
]
]);
};
Itu bisa digunakan langsung di kunci knp_paginator.template.pagination
:
@KnpPaginator/Pagination/sliding.html.twig
(secara default)@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
Itu bisa digunakan langsung di kunci knp_paginator.template.rel_links
:
@KnpPaginator/Pagination/rel_links.html.twig
(secara default) Itu bisa digunakan langsung di kunci knp_paginator.template.sortable
:
@KnpPaginator/Pagination/sortable_link.html.twig
(secara default)@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
Itu bisa digunakan langsung di kunci knp_paginator.template.filtration
:
@KnpPaginator/Pagination/filtration.html.twig
(secara default)@KnpPaginator/Pagination/bootstrap_v5_filtration.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v4_filtration.html.twig
Saat ini paginator dapat membuat paginasi:
array
DoctrineDBALQueryQueryBuilder
DoctrineORMQuery
DoctrineORMQueryBuilder
DoctrineODMMongoDBQueryQuery
DoctrineODMMongoDBQueryBuilder
DoctrineODMPHPCRQueryQuery
DoctrineODMPHPCRQueryBuilderQueryBuilder
DoctrineCommonCollectionArrayCollection
- semua koleksi relasi Doktrin termasukModelCriteria
- Mendorong kueri ORMSolarium_Client
dan Solarium_Query_Select
sebagai elemen // 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 >
Untuk menerjemahkan teks berikut:
%foo% name
dengan kunci terjemahan table_header_name
. Terjemahannya ada di messages
domain.{0} No author|{1} Author|[2,Inf] Authors
dengan kunci terjemahan table_header_author
. Terjemahannya ada di messages
domain.TranslationCount dan TranslationParameters dapat digabungkan.
< 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 >
Anda juga dapat mengganti terjemahan dengan membuat file terjemahan dalam format nama berikut: domain.locale.format
. Jadi, untuk membuat file terjemahan untuk bundel ini, Anda perlu membuat misalnya file KnpPaginatorBundle.tr.yaml
di bawah project_root/translations/
dan menambahkan terjemahan Anda di sana:
label_previous : " Önceki "
label_next : " Sonraki "
filter_searchword : " Arama kelimesi "
Jika Anda menyetel terjemahan default untuk konfigurasi yang sesuai:
framework :
default_locale : tr
Symfony akan mengambilnya secara otomatis.
Anda dapat secara otomatis memasukkan layanan paginator ke layanan lain dengan menggunakan tag DIC knp_paginator.injectable
. Tag ini mengambil satu argumen opsional paginator
, yang merupakan ID layanan paginator yang harus dimasukkan. Standarnya adalah knp_paginator
.
Kelas yang menerima layanan KnpPaginator harus mengimplementasikan KnpBundlePaginatorBundleDefinitionPaginatorAwareInterface
. Jika Anda terlalu malas, Anda juga dapat memperluas kelas dasar KnpBundlePaginatorBundleDefinitionPaginatorAware
.
Peringatan penggunaan
PaginatorAwareInterface
tidak disarankan, dan dapat dihapus di versi mendatang. Anda tidak boleh mengandalkan injeksi penyetel, tetapi hanya pada injeksi konstruktor yang tepat. Menggunakan mekanisme pengkabelan otomatis bawaan Symfony adalah cara yang disarankan.
Layanan knp_paginator
akan dibuat lambat jika paket symfony/proxy-manager-bridge
diinstal.
Untuk informasi lebih lanjut tentang layanan lambat, lihat dokumentasi Symfony tentang injeksi ketergantungan.
<? 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
(gantikan "en" untuk kode bahasa Anda sendiri jika diperlukan). Kemudian tambahkan baris ini: label_next : Next
label_previous : Previous
<rel>
hanya bermakna saat menggunakan penomoran halaman, tidak relevan dengan pengurutan atau pemfilteran. Silakan baca postingan ini terlebih dahulu.
Perpustakaan ini dikelola oleh orang-orang berikut (diurutkan berdasarkan abjad):