ตัวแบ่งหน้า Symfony ที่เป็นมิตรเพื่อแบ่งหน้าทุกอย่าง
โดยทั่วไปบันเดิลนี้จะขึ้นอยู่กับคอมโพเนนต์ Knp Pager ส่วนประกอบนี้จะแนะนำวิธีการจัดการการแบ่งหน้าที่แตกต่างกัน คุณสามารถอ่านเพิ่มเติมเกี่ยวกับตรรกะภายในได้จากลิงก์เอกสารที่ให้มา
หมายเหตุ: ซิงค์ ส่วนประกอบ knp กับบันเดิลนี้ หากคุณต้องการใช้ KnpPaginatorBundle เวอร์ชันเก่า - ใช้แท็ก v3.0 หรือ v4.X ในที่เก็บซึ่งเหมาะสำหรับการแบ่งหน้าคำสั่ง ODM MongoDB และ ORM 2.0
สำหรับรายละเอียดเกี่ยวกับการเปลี่ยนแปลง โปรดอ่านเกี่ยวกับการเผยแพร่
>=4.4
>=6.4
เวอร์ชัน>=3.0
หากคุณใช้กลไกการสร้างเทมเพลต Twig หมายเหตุ: การใช้ตัวแบ่งหน้าหลายตัวจำเป็นต้องตั้งค่า นามแฝง เพื่อรักษาพารามิเตอร์ที่ไม่ขัดแย้งกัน
composer require knplabs/knp-paginator-bundle
หากคุณไม่ได้ใช้ flex (คุณควร) คุณต้องเปิดใช้งานบันเดิลด้วยตนเอง:
// app / AppKernel . php
public function registerBundles ()
{
return [
// ...
new Knp Bundle PaginatorBundle KnpPaginatorBundle (),
// ...
];
}
คุณสามารถกำหนดค่าชื่อและเทมเพลตพารามิเตอร์การค้นหาเริ่มต้น และตัวเลือกอื่นๆ ได้ดังนี้
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
]
]);
};
ที่สามารถนำมาใช้นอกกรอบในคีย์ knp_paginator.template.pagination
:
@KnpPaginator/Pagination/sliding.html.twig
(โดยค่าเริ่มต้น)@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
ที่สามารถนำมาใช้นอกกรอบในคีย์ knp_paginator.template.rel_links
:
@KnpPaginator/Pagination/rel_links.html.twig
(โดยค่าเริ่มต้น) ที่สามารถนำมาใช้นอกกรอบในคีย์ knp_paginator.template.sortable
:
@KnpPaginator/Pagination/sortable_link.html.twig
(โดยค่าเริ่มต้น)@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
ที่สามารถใช้งานได้ทันทีในคีย์ knp_paginator.template.filtration
:
@KnpPaginator/Pagination/filtration.html.twig
(โดยค่าเริ่มต้น)@KnpPaginator/Pagination/bootstrap_v5_filtration.html.twig
@KnpPaginator/Pagination/twitter_bootstrap_v4_filtration.html.twig
ตัวแบ่งหน้าในปัจจุบันสามารถแบ่งหน้าได้:
array
DoctrineDBALQueryQueryBuilder
DoctrineORMQuery
DoctrineORMQueryBuilder
DoctrineODMMongoDBQueryQuery
DoctrineODMMongoDBQueryBuilder
DoctrineODMPHPCRQueryQuery
DoctrineODMPHPCRQueryBuilderQueryBuilder
DoctrineCommonCollectionArrayCollection
- คอลเล็กชันความสัมพันธ์ของ Doctrine รวมถึงModelCriteria
- ขับเคลื่อนแบบสอบถาม ORMSolarium_Client
และ Solarium_Query_Select
เป็นองค์ประกอบ // 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 >
สำหรับการแปลข้อความต่อไปนี้:
%foo% name
พร้อมคีย์การแปล table_header_name
คำแปลอยู่ใน messages
โดเมน{0} No author|{1} Author|[2,Inf] Authors
ที่มีคีย์การแปล table_header_author
คำแปลอยู่ใน messages
โดเมนTranslationCount และ TranslationParameters สามารถนำมารวมกันได้
< 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 >
คุณยังสามารถลบล้างการแปลได้โดยการสร้างไฟล์การแปลในรูปแบบชื่อต่อไปนี้: domain.locale.format
ดังนั้น ในการสร้างไฟล์การแปลสำหรับบันเดิลนี้ คุณจะต้องสร้างไฟล์ KnpPaginatorBundle.tr.yaml
ไว้ใต้ project_root/translations/
และเพิ่มคำแปลของคุณที่นั่น:
label_previous : " Önceki "
label_next : " Sonraki "
filter_searchword : " Arama kelimesi "
หากคุณตั้งค่าการแปลเริ่มต้นสำหรับการกำหนดค่าตามนั้น:
framework :
default_locale : tr
Symfony จะเลือกมันโดยอัตโนมัติ
คุณสามารถแทรกเซอร์วิส paginator ลงในเซอร์วิสอื่นได้โดยอัตโนมัติโดยใช้แท็ก DIC knp_paginator.injectable
แท็ก ใช้ paginator
อาร์กิวเมนต์ที่เป็นทางเลือกหนึ่งตัว ซึ่งเป็นรหัสของบริการตัวแบ่งหน้าที่ควรแทรก โดยค่าเริ่มต้นจะเป็น knp_paginator
คลาสที่ได้รับบริการ KnpPaginator ต้องใช้ KnpBundlePaginatorBundleDefinitionPaginatorAwareInterface
หากคุณขี้เกียจเกินไป คุณก็สามารถขยายคลาสพื้นฐาน KnpBundlePaginatorBundleDefinitionPaginatorAware
ได้
ไม่สนับสนุน คำเตือน การใช้
PaginatorAwareInterface
และสามารถลบออกได้ในเวอร์ชันต่อๆ ไป คุณไม่ควรพึ่งพาการฉีดเซ็ตเตอร์ แต่ควรใช้การฉีดคอนสตรัคเตอร์ที่เหมาะสมเท่านั้น การใช้กลไกการเดินสายอัตโนมัติในตัวของ Symfony เป็นวิธีที่แนะนำ
บริการ knp_paginator
จะถูกสร้างขึ้นอย่างเกียจคร้านหากติดตั้งแพ็คเกจ symfony/proxy-manager-bridge
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบริการที่ขี้เกียจ โปรดดูเอกสารประกอบของ Symfony เกี่ยวกับการฉีดการพึ่งพา
<? 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
(แทนที่ "en" สำหรับรหัสภาษาของคุณเอง หากจำเป็น) จากนั้นเพิ่มบรรทัดเหล่านี้: label_next : Next
label_previous : Previous
<rel>
จะมีความหมายเมื่อใช้การแบ่งหน้าเท่านั้น ซึ่งไม่เกี่ยวข้องกับการเรียงลำดับหรือการกรอง โปรดอ่านโพสต์นี้ก่อน
ห้องสมุดนี้ดูแลโดยบุคคลต่อไปนี้ (เรียงตามตัวอักษร):