From dd2ed29bb2f2eb8f4a24f36ed3fbbf870db17dca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9stor=20de=20Dios=20Fern=C3=A1ndez?= Date: Mon, 19 Aug 2019 14:36:51 +0200 Subject: [PATCH] WIP for better sortby content and taxonomy --- .../Backend/ContentOverviewController.php | 5 +- src/Repository/ContentRepository.php | 28 +++++++++-- templates/content/listing.html.twig | 47 +++++++++++++------ 3 files changed, 61 insertions(+), 19 deletions(-) diff --git a/src/Controller/Backend/ContentOverviewController.php b/src/Controller/Backend/ContentOverviewController.php index 23792f08..ec804c8e 100644 --- a/src/Controller/Backend/ContentOverviewController.php +++ b/src/Controller/Backend/ContentOverviewController.php @@ -27,11 +27,12 @@ class ContentOverviewController extends TwigAwareController implements BackendZo $page = (int) $request->query->get('page', 1); $amountPerPage = $contentType->get('records_per_page', 10); - if ($request->query->get('sort') && $request->query->get('filter')) { + if ($request->query->get('sort') && $request->query->get('filter') && $request->query->get('taxonomy')) { $sortBy = $request->query->get('sort'); $filter = $request->query->get('filter'); + $taxonomy = $request->query->get('taxonomy'); - $records = $contentRepository->findForListing($page, $amountPerPage, $contentType, false, $sortBy, $filter); + $records = $contentRepository->findForListing($page, $amountPerPage, $contentType, false, $sortBy, $filter, $taxonomy); } elseif ($request->query->get('sort')) { $sortBy = $request->query->get('sort'); $records = $contentRepository->findForListing($page, $amountPerPage, $contentType, false, $sortBy, ''); diff --git a/src/Repository/ContentRepository.php b/src/Repository/ContentRepository.php index cf0e1280..b4180cb2 100644 --- a/src/Repository/ContentRepository.php +++ b/src/Repository/ContentRepository.php @@ -34,7 +34,7 @@ class ContentRepository extends ServiceEntityRepository return $this->createQueryBuilder('content'); } - public function findForListing(int $page, int $amountPerPage, ?ContentType $contentType = null, bool $onlyPublished = true, string $sortBy = '', string $filter = ''): Pagerfanta + public function findForListing(int $page, int $amountPerPage, ?ContentType $contentType = null, bool $onlyPublished = true, string $sortBy = '', string $filter = '', string $taxonomy = ''): Pagerfanta { $qb = $this->getQueryBuilder() ->addSelect('a') @@ -55,12 +55,33 @@ class ContentRepository extends ServiceEntityRepository ->innerJoin('content.fields', 'f'); } + if($taxonomy) { + $qb->addSelect('t') + ->innerJoin('content.taxonomies', 't') + ->andWhere('slug', ':taxonomySlug') + ->setParameter('taxonomySlug', $taxonomy); + } + if ($sortBy && \in_array($sortBy, $this->contentColumns, true)) { $qb->orderBy('content.' . $sortBy); } elseif (! empty($sortBy)) { - $qb->andWhere('f.name = :fieldname') + // First, create a querybuilder to get the fields that match the Query + $sortByQB = $this->getQueryBuilder() + ->select('partial content.{id}'); + + $sortByQB->addSelect('f') + ->innerJoin('content.fields', 'f') + ->andWhere('f.name = :fieldname') + ->setParameter('fieldname', $sortBy); + + // These are the ID's of content we need. + $ids = array_column($sortByQB->getQuery()->getArrayResult(), 'id'); + + $qb->andWhere('content.id IN (:ids)') + ->setParameter('ids', $ids) + ->andWhere('f.name = :fieldname') ->setParameter('fieldname', $sortBy) - ->orderBy('f.value'); + ->addOrderBy('f.value'); } if ($filter) { @@ -79,6 +100,7 @@ class ContentRepository extends ServiceEntityRepository $qb->andWhere('content.id IN (:ids)') ->setParameter('ids', $ids); } + dump($qb->getQuery()->getArrayResult()); return $this->createPaginator($qb->getQuery(), $page, $amountPerPage); } diff --git a/templates/content/listing.html.twig b/templates/content/listing.html.twig index 80d5b1a2..971179f4 100644 --- a/templates/content/listing.html.twig +++ b/templates/content/listing.html.twig @@ -47,8 +47,8 @@ 'modifiedAt': 'Modified date', 'publishedAt': 'Published date', 'depublishedAt': 'Depublished date' } %} {% set sortBy = app.request.get('sort')|default() %} + {% set taxonomy = app.request.get('taxonomy')|default() %} {% set filterValue = app.request.get('filter')|default() %} -
{{ 'title.contentlisting'|trans }} @@ -56,19 +56,38 @@
-

- {{ 'listing.title_sortby'|trans }}: - -

+{# Needs more work #} +{#

#} +{# {{ 'listing.title_sortby'|trans }}:#} +{# #} +{#

#} +{# {% if contentType.get('taxonomy') %}#} +{#

#} +{# {{ 'listing.title_taxonomy'|trans }}:#} +{# #} +{#

#} +{# {% endif %}#}

{{ 'listing.title_title'|trans }}: