ترقيم صفحات Symfony الودي لترقيم كل شيء
بشكل عام، تعتمد هذه الحزمة على مكون Knp Pager. يقدم هذا المكون طريقة مختلفة للتعامل مع ترقيم الصفحات. يمكنك قراءة المزيد عن المنطق الداخلي على رابط التوثيق المحدد.
ملاحظة: حافظ على مزامنة مكونات knp مع هذه الحزمة. إذا كنت تريد استخدام إصدار أقدم من KnpPaginatorBundle - استخدم علامات v3.0 أو v4.X في المستودع المناسب لترقيم صفحات استعلامات ODM MongoDB و ORM 2.0
للحصول على تفاصيل بشأن التغييرات يرجى قراءة حول الإصدارات.
>=4.4
.>=6.4
.>=3.0
إذا كنت تستخدم محرك Twig templating. ملاحظة: يتطلب استخدام مُرقِّم صفحات متعدد تعيين الاسم المستعار للاحتفاظ بالمعلمات غير المتعارضة.
composer require knplabs/knp-paginator-bundle
إذا كنت لا تستخدم المرن (ينبغي عليك ذلك)، فستحتاج إلى تمكين الحزمة يدويًا:
// 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
المجال .يمكن الجمع بين عدد الترجمة ومعلمات الترجمة.
< 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 باختياره تلقائيًا.
يمكنك إدخال خدمة ترقيم الصفحات تلقائيًا في خدمة أخرى باستخدام علامة 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>
تكون ذات معنى فقط عند استخدام ترقيم الصفحات، وليست ذات صلة بالفرز أو التصفية. يرجى قراءة هذا المنصب أولا.
تتم صيانة هذه المكتبة من قبل الأشخاص التاليين (مرتبة أبجديًا):