Startseiten-Reisekategorien aus CMS-Widget statt fester Abfrage laden.
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 <cursoragent@cursor.com>
This commit is contained in:
parent
64dce95f20
commit
d4b7937801
5 changed files with 53 additions and 4 deletions
|
|
@ -190,7 +190,7 @@
|
||||||
|
|
||||||
<section id="dev-home-countries">
|
<section id="dev-home-countries">
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<h2 class="h3 h3l">Alle Reisekategorien auf einen Blick</h2>
|
<h2 class="h3 h3l">{{ homepage_country_title|default('Alle Reisekategorien auf einen Blick') }}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %}
|
{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %}
|
||||||
|
|
|
||||||
|
|
@ -172,7 +172,7 @@
|
||||||
|
|
||||||
<section id="home-countries">
|
<section id="home-countries">
|
||||||
<div class="clearfix">
|
<div class="clearfix">
|
||||||
<h2 class="h3 h3l">Alle Reisekategorien auf einen Blick</h2>
|
<h2 class="h3 h3l">{{ homepage_country_title|default('Alle Reisekategorien auf einen Blick') }}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %}
|
{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %}
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ class DefaultController extends Controller
|
||||||
$sidebarWidgetRepo = $this->getEntityManager()->getRepository('AppBundle:SidebarWidget');
|
$sidebarWidgetRepo = $this->getEntityManager()->getRepository('AppBundle:SidebarWidget');
|
||||||
$plannableTripsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepagePlannableTrips');
|
$plannableTripsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepagePlannableTrips');
|
||||||
$popularTripsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepagePopularTrips');
|
$popularTripsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepagePopularTrips');
|
||||||
|
$travelCategoriesWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('homepageTravelCategories');
|
||||||
$newsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('newsSidebarWidget', 'home');
|
$newsWidget = $sidebarWidgetRepo->findActiveWidgetByComponent('newsSidebarWidget', 'home');
|
||||||
$homepageOfferPages = $popularTripsWidget
|
$homepageOfferPages = $popularTripsWidget
|
||||||
? $pageRepo->findActiveTravelPagesByIds($popularTripsWidget->getConfigPageIds())
|
? $pageRepo->findActiveTravelPagesByIds($popularTripsWidget->getConfigPageIds())
|
||||||
|
|
@ -123,6 +124,13 @@ class DefaultController extends Controller
|
||||||
$devHomeSidebarOfferPages = $pageRepo->findHomepageOffers(4);
|
$devHomeSidebarOfferPages = $pageRepo->findHomepageOffers(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$countryPages = $travelCategoriesWidget
|
||||||
|
? $pageRepo->findActiveCountryPagesByIds($travelCategoriesWidget->getConfigPageIds())
|
||||||
|
: [];
|
||||||
|
if (empty($countryPages)) {
|
||||||
|
$countryPages = $pageRepo->findHomepageCountryPages();
|
||||||
|
}
|
||||||
|
|
||||||
$fewoLodgings = [];
|
$fewoLodgings = [];
|
||||||
$lodgingGroups = $this->getEntityManager()->getRepository('AppBundle:FewoLodgingGroup')->findAll();
|
$lodgingGroups = $this->getEntityManager()->getRepository('AppBundle:FewoLodgingGroup')->findAll();
|
||||||
foreach ($lodgingGroups as $lodgingGroup) {
|
foreach ($lodgingGroups as $lodgingGroup) {
|
||||||
|
|
@ -144,7 +152,10 @@ class DefaultController extends Controller
|
||||||
'homepage_offer_pages' => $homepageOfferPages,
|
'homepage_offer_pages' => $homepageOfferPages,
|
||||||
'homepage_offer_title' => $popularTripsWidget && $popularTripsWidget->getName() ? $popularTripsWidget->getName() : 'beliebtesten Kulturreisen',
|
'homepage_offer_title' => $popularTripsWidget && $popularTripsWidget->getName() ? $popularTripsWidget->getName() : 'beliebtesten Kulturreisen',
|
||||||
'homepage_offer_new_page_ids' => $popularTripsWidget ? $popularTripsWidget->getConfigNewPageIds() : [],
|
'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,
|
'fewo_lodgings' => $fewoLodgings,
|
||||||
'dev_home_sidebar' => true,
|
'dev_home_sidebar' => true,
|
||||||
'dev_home_sidebar_offer_title' => $plannableTripsWidget && $plannableTripsWidget->getName() ? $plannableTripsWidget->getName() : 'Aktuell planbare Reisen',
|
'dev_home_sidebar_offer_title' => $plannableTripsWidget && $plannableTripsWidget->getName() ? $plannableTripsWidget->getName() : 'Aktuell planbare Reisen',
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,44 @@ class PageRepository extends NestedTreeRepository
|
||||||
return $ret;
|
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[]
|
* @return Page[]
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ class SidebarWidgetRepository extends \Doctrine\ORM\EntityRepository
|
||||||
$qb = $this->createQueryBuilder('sidebar_widget');
|
$qb = $this->createQueryBuilder('sidebar_widget');
|
||||||
$qb->where('sidebar_widget.active = 1')
|
$qb->where('sidebar_widget.active = 1')
|
||||||
->andWhere('sidebar_widget.component NOT IN (:configComponents)')
|
->andWhere('sidebar_widget.component NOT IN (:configComponents)')
|
||||||
->setParameter('configComponents', ['homepagePlannableTrips', 'homepagePopularTrips'])
|
->setParameter('configComponents', ['homepagePlannableTrips', 'homepagePopularTrips', 'homepageTravelCategories'])
|
||||||
->addOrderBy('sidebar_widget.pos', 'ASC');
|
->addOrderBy('sidebar_widget.pos', 'ASC');
|
||||||
$results = $qb->getQuery()->getResult();
|
$results = $qb->getQuery()->getResult();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue