mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
adding twig extensions to select how many items per page
* twig anchor: {{ chill_items_per_page(pagination) }} * select field changed with javascript event listener
This commit is contained in:
parent
d2c631ae20
commit
3ee676600e
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS,
|
||||||
|
* <http://www.champs-libres.coop>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\MainBundle\Pagination;
|
||||||
|
|
||||||
|
use Twig\Environment;
|
||||||
|
use Twig\Extension\AbstractExtension;
|
||||||
|
use Twig\TwigFunction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add twig function to render pagination
|
||||||
|
*
|
||||||
|
* @author Mathieu Jaumotte <mathieu.jaumotte@champs-libres.coop>
|
||||||
|
* @author Champs Libres <info@champs-libres.coop>
|
||||||
|
*/
|
||||||
|
class ChillItemsPerPageTwig extends AbstractExtension
|
||||||
|
{
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'chill_items_per_page';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFunctions()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new TwigFunction(
|
||||||
|
'chill_items_per_page',
|
||||||
|
array($this, 'paginationRender'),
|
||||||
|
array(
|
||||||
|
'needs_environment' => true,
|
||||||
|
'is_safe' => ['html']
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function paginationRender(
|
||||||
|
Environment $env,
|
||||||
|
PaginatorInterface $paginator,
|
||||||
|
$template = '@ChillMain/Pagination/items_per_page.html.twig'
|
||||||
|
) {
|
||||||
|
|
||||||
|
return $env->render($template, array(
|
||||||
|
'paginator' => $paginator,
|
||||||
|
'current' => $paginator->getItemsPerPage()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
@ -61,7 +61,7 @@ class PaginatorFactory
|
|||||||
public function __construct(
|
public function __construct(
|
||||||
RequestStack $requestStack,
|
RequestStack $requestStack,
|
||||||
RouterInterface $router,
|
RouterInterface $router,
|
||||||
$itemPerPage = 50
|
$itemPerPage = 20
|
||||||
) {
|
) {
|
||||||
$this->itemPerPage = $itemPerPage;
|
$this->itemPerPage = $itemPerPage;
|
||||||
$this->requestStack = $requestStack;
|
$this->requestStack = $requestStack;
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
<select class="form-select" aria-label="items Per Page" id="itemsPerPage">
|
||||||
|
<option value="10">10 {{ 'results'|trans }}</option>
|
||||||
|
<option value="20">20 {{ 'results'|trans }}</option>
|
||||||
|
<option value="50">50 {{ 'results'|trans }}</option>
|
||||||
|
<option value="100">100 {{ 'results'|trans }}</option>
|
||||||
|
</select>
|
||||||
|
<script>
|
||||||
|
let select = document.querySelector("select#itemsPerPage");
|
||||||
|
window.addEventListener('load', () =>
|
||||||
|
select.value = {{ current }}
|
||||||
|
);
|
||||||
|
select.addEventListener('change', () => {
|
||||||
|
let url = new URL(window.location.href);
|
||||||
|
let params = url.searchParams;
|
||||||
|
params.set('page', '1');
|
||||||
|
params.set('item_per_page', select.value);
|
||||||
|
url.search = params.toString();
|
||||||
|
window.location.href = url.toString();
|
||||||
|
});
|
||||||
|
</script>
|
@ -8,8 +8,13 @@ services:
|
|||||||
- "%chill_main.pagination.item_per_page%"
|
- "%chill_main.pagination.item_per_page%"
|
||||||
|
|
||||||
Chill\MainBundle\Pagination\PaginatorFactory: '@chill_main.paginator_factory'
|
Chill\MainBundle\Pagination\PaginatorFactory: '@chill_main.paginator_factory'
|
||||||
|
|
||||||
chill_main.paginator.twig_extensions:
|
chill_main.paginator.twig_extensions:
|
||||||
class: Chill\MainBundle\Pagination\ChillPaginationTwig
|
class: Chill\MainBundle\Pagination\ChillPaginationTwig
|
||||||
tags:
|
tags:
|
||||||
- { name: twig.extension }
|
- { name: twig.extension }
|
||||||
|
|
||||||
|
chill_main.paginator.items_per_page.twig_extensions:
|
||||||
|
class: Chill\MainBundle\Pagination\ChillItemsPerPageTwig
|
||||||
|
tags:
|
||||||
|
- { name: twig.extension }
|
||||||
|
@ -85,6 +85,7 @@ Search %pattern%: Recherche de "%pattern%"
|
|||||||
Results %start%-%end% of %total%: Résultats %start%-%end% sur %total%
|
Results %start%-%end% of %total%: Résultats %start%-%end% sur %total%
|
||||||
See all results: Voir tous les résultats
|
See all results: Voir tous les résultats
|
||||||
Advanced search: Recherche avancée
|
Advanced search: Recherche avancée
|
||||||
|
results: résultats
|
||||||
|
|
||||||
# timeline
|
# timeline
|
||||||
Global timeline: Historique global
|
Global timeline: Historique global
|
||||||
|
@ -70,8 +70,6 @@ class ThirdPartyController extends Controller
|
|||||||
$nbThirdParties = $repository->countByMemberOfCenters($centers);
|
$nbThirdParties = $repository->countByMemberOfCenters($centers);
|
||||||
$pagination = $this->paginatorFactory->create($nbThirdParties);
|
$pagination = $this->paginatorFactory->create($nbThirdParties);
|
||||||
|
|
||||||
$pagination->setItemsPerPage(20);
|
|
||||||
|
|
||||||
$thirdParties = $repository->findByMemberOfCenters(
|
$thirdParties = $repository->findByMemberOfCenters(
|
||||||
$centers,
|
$centers,
|
||||||
$pagination->getCurrentPage()->getFirstItemNumber(),
|
$pagination->getCurrentPage()->getFirstItemNumber(),
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
<nav class="filter-actions border border-secondary my-4 p-3">
|
<nav class="filter-actions border border-secondary my-4 p-3">
|
||||||
filter nav
|
filter nav
|
||||||
|
{{ dump() }}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -23,7 +24,7 @@
|
|||||||
<div class="col-md-10 col-xxl">
|
<div class="col-md-10 col-xxl">
|
||||||
|
|
||||||
<label class="counter">
|
<label class="counter">
|
||||||
<span>xxx</span> {{ 'third parties'|trans }}
|
<span>{{ pagination.totalItems }}</span> {{ 'third parties'|trans }}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<table class="table table-striped table-hover align-middle">
|
<table class="table table-striped table-hover align-middle">
|
||||||
@ -82,11 +83,7 @@
|
|||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
<ul class="record_actions sticky-form-buttons">
|
||||||
<li class="cancel">
|
<li class="cancel">
|
||||||
<select class="form-select" aria-label="itemsPerPage">
|
{{ chill_items_per_page(pagination) }}
|
||||||
<option value="20">20 / page</option>
|
|
||||||
<option value="50">50 / page</option>
|
|
||||||
<option value="100">100 / page</option>
|
|
||||||
</select>
|
|
||||||
</li>
|
</li>
|
||||||
{% if is_granted('CHILL_3PARTY_3PARTY_CREATE') %}
|
{% if is_granted('CHILL_3PARTY_3PARTY_CREATE') %}
|
||||||
<li>
|
<li>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user