From d4b79378012e512e87592433d67d71da875c3d9d Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Thu, 18 Jun 2026 10:46:30 +0000 Subject: [PATCH] Startseiten-Reisekategorien aus CMS-Widget statt fester Abfrage laden. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bindet das neue Sidebar-Widget an die Startseite an und nutzt den Widget-Titel für die Überschrift, mit Fallback auf die bisherige Logik. Co-authored-by: Cursor --- .../views/default/pages/dev/home.html.twig | 2 +- .../views/default/pages/home.html.twig | 2 +- .../Controller/DefaultController.php | 13 ++++++- src/AppBundle/Entity/PageRepository.php | 38 +++++++++++++++++++ .../Entity/SidebarWidgetRepository.php | 2 +- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/app/Resources/views/default/pages/dev/home.html.twig b/app/Resources/views/default/pages/dev/home.html.twig index 7735033f..f09a8481 100644 --- a/app/Resources/views/default/pages/dev/home.html.twig +++ b/app/Resources/views/default/pages/dev/home.html.twig @@ -190,7 +190,7 @@
-

Alle Reisekategorien auf einen Blick

+

{{ homepage_country_title|default('Alle Reisekategorien auf einen Blick') }}

{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %} diff --git a/app/Resources/views/default/pages/home.html.twig b/app/Resources/views/default/pages/home.html.twig index bda852cf..c1d0068c 100644 --- a/app/Resources/views/default/pages/home.html.twig +++ b/app/Resources/views/default/pages/home.html.twig @@ -172,7 +172,7 @@
-

Alle Reisekategorien auf einen Blick

+

{{ homepage_country_title|default('Alle Reisekategorien auf einen Blick') }}

{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %} diff --git a/src/AppBundle/Controller/DefaultController.php b/src/AppBundle/Controller/DefaultController.php index b6c8dab2..b3756911 100644 --- a/src/AppBundle/Controller/DefaultController.php +++ b/src/AppBundle/Controller/DefaultController.php @@ -108,6 +108,7 @@ class DefaultController extends Controller $sidebarWidgetRepo = $this->getEntityManager()->getRepository('AppBundle:SidebarWidget'); $plannableTripsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepagePlannableTrips'); $popularTripsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepagePopularTrips'); + $travelCategoriesWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepageTravelCategories'); $newsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('newsSidebarWidget', 'home'); $homepageOfferPages = $popularTripsWidget ? $pageRepo->findActiveTravelPagesByIds($popularTripsWidget->getConfigPageIds()) @@ -123,6 +124,13 @@ class DefaultController extends Controller $devHomeSidebarOfferPages = $pageRepo->findHomepageOffers(4); } + $countryPages = $travelCategoriesWidget + ? $pageRepo->findActiveCountryPagesByIds($travelCategoriesWidget->getConfigPageIds()) + : []; + if (empty($countryPages)) { + $countryPages = $pageRepo->findHomepageCountryPages(); + } + $fewoLodgings = []; $lodgingGroups = $this->getEntityManager()->getRepository('AppBundle:FewoLodgingGroup')->findAll(); foreach ($lodgingGroups as $lodgingGroup) { @@ -144,7 +152,10 @@ class DefaultController extends Controller 'homepage_offer_pages' => $homepageOfferPages, 'homepage_offer_title' => $popularTripsWidget && $popularTripsWidget->getName() ? $popularTripsWidget->getName() : 'beliebtesten Kulturreisen', 'homepage_offer_new_page_ids' => $popularTripsWidget ? $popularTripsWidget->getConfigNewPageIds() : [], - 'country_pages' => $pageRepo->findHomepageCountryPages(), + 'country_pages' => $countryPages, + 'homepage_country_title' => $travelCategoriesWidget && $travelCategoriesWidget->getName() + ? $travelCategoriesWidget->getName() + : 'Alle Reisekategorien auf einen Blick', 'fewo_lodgings' => $fewoLodgings, 'dev_home_sidebar' => true, 'dev_home_sidebar_offer_title' => $plannableTripsWidget && $plannableTripsWidget->getName() ? $plannableTripsWidget->getName() : 'Aktuell planbare Reisen', diff --git a/src/AppBundle/Entity/PageRepository.php b/src/AppBundle/Entity/PageRepository.php index 202100bf..68e09aeb 100644 --- a/src/AppBundle/Entity/PageRepository.php +++ b/src/AppBundle/Entity/PageRepository.php @@ -170,6 +170,44 @@ class PageRepository extends NestedTreeRepository return $ret; } + /** + * @param int[] $ids + * @return Page[] + */ + public function findActiveCountryPagesByIds(array $ids) + { + $ids = array_values(array_filter(array_map('intval', $ids))); + + if (empty($ids)) { + return []; + } + + $pages = $this->createQueryBuilder('node') + ->innerJoin('node.country', 'country') + ->addSelect('country') + ->where('node.id IN (:ids)') + ->andWhere('node.status > 0') + ->andWhere('node.template = \'overview\'') + ->andWhere('node.lvl = 0') + ->setParameter('ids', $ids) + ->getQuery() + ->execute(); + + $pagesById = []; + foreach ($pages as $page) { + $pagesById[$page->getId()] = $page; + } + + $ret = []; + foreach ($ids as $id) { + if (isset($pagesById[$id])) { + $ret[] = $pagesById[$id]; + } + } + + return $ret; + } + /** * @return Page[] */ diff --git a/src/AppBundle/Entity/SidebarWidgetRepository.php b/src/AppBundle/Entity/SidebarWidgetRepository.php index 01a3ce99..895ec55c 100644 --- a/src/AppBundle/Entity/SidebarWidgetRepository.php +++ b/src/AppBundle/Entity/SidebarWidgetRepository.php @@ -16,7 +16,7 @@ class SidebarWidgetRepository extends \Doctrine\ORM\EntityRepository $qb = $this->createQueryBuilder('sidebar_widget'); $qb->where('sidebar_widget.active = 1') ->andWhere('sidebar_widget.component NOT IN (:configComponents)') - ->setParameter('configComponents', ['homepagePlannableTrips', 'homepagePopularTrips']) + ->setParameter('configComponents', ['homepagePlannableTrips', 'homepagePopularTrips', 'homepageTravelCategories']) ->addOrderBy('sidebar_widget.pos', 'ASC'); $results = $qb->getQuery()->getResult();