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">
|
||||
<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>
|
||||
|
||||
{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %}
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@
|
|||
|
||||
<section id="home-countries">
|
||||
<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>
|
||||
|
||||
{% include 'default/components/multiPageBoxCarousel.html.twig' with {pages: country_pages} %}
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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[]
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue