* Startseite

* Sidebar-Widgets: Reisemagazin, Reiseführer, Angebote

git-svn-id: http://78.47.251.156/svn/dev/sterntours-3@3301 f459cee4-fb09-11de-96c3-f9c5f16c3c76
This commit is contained in:
uli 2017-02-21 20:09:46 +00:00
parent 353b758bcd
commit 4278e110fc
12 changed files with 305 additions and 381 deletions

View file

@ -5,7 +5,7 @@ namespace AppBundle\Controller;
use AppBundle\Entity\BreadcrumbEntry;
use AppBundle\Entity\ContactRequest;
use AppBundle\Entity\Page;
use AppBundle\Entity\TravelProgram;
use AppBundle\Entity\TravelCountry;
use AppBundle\Form\ContactRequestType;
use AppBundle\Form\SearchRequestType;
use AppBundle\Form\TtSearchRequestType;
@ -16,7 +16,6 @@ use Gedmo\Tree\TreeListener;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Stopwatch\Stopwatch;
class DefaultController extends Controller
{
@ -44,6 +43,8 @@ class DefaultController extends Controller
'show_search_sidebar_widget' => false,
'search_form' => $this->createForm(SearchRequestType::class)->createView(),
'tt_search_form' => $this->createForm(TtSearchRequestType::class)->createView(),
'offers' => $this->getEntityManager()->getRepository('AppBundle:Page')->findOffers(),
'country_pages' => $this->getEntityManager()->getRepository('AppBundle:Page')->findCountryPages(),
]);
}
@ -256,7 +257,7 @@ class DefaultController extends Controller
$this->get('mailer')->send(\Swift_Message::newInstance()
->setSubject('Kontaktformular (stern-tours.de)')
->setFrom('stern@stern-tours.de', 'STERN TOURS')
->setTo('ulrich.hecht@hecht-software.de')
->setTo('stern@stern-tours.de')
->setBody(
$this->renderView('default/email/contactServiceEmail.txt.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
@ -284,19 +285,7 @@ class DefaultController extends Controller
public function headerAction()
{
$qb = $this->getEntityManager()->createQueryBuilder();
$navPages = $qb
->from('AppBundle:Page', 'page')
->select('page')
->leftJoin('page.children', 'childPage', Expr\Join::WITH, 'childPage.status > 0')
->addSelect('childPage')
->where('page.status > 0')
->andWhere('page.template = \'overview\'')
->andWhere('page.lvl = 0')
->orderBy('page.lft,page.title,childPage.lft,childPage.title')
->getQuery()
->execute()
;
$navPages = $this->getEntityManager()->getRepository('AppBundle:Page')->findTopCountryNavPages();
return $this->render('default/components/header.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'nav_pages' => $navPages,
@ -383,6 +372,47 @@ class DefaultController extends Controller
]);
}
public function travelGuideSidebarWidgetAction(TravelCountry $country)
{
$repo = $this->getEntityManager()->getRepository('AppBundle:Page');
$rootPage = $repo->find(13);
$pages = $repo->getChildrenQueryBuilder($rootPage)
->andWhere('IDENTITY(node.country) = '. $country->getId())
->setMaxResults(3)
->getQuery()
->execute()
;
return $this->render('default/components/sidebar/textSliderSidebarWidget.html.twig', [
'slider_title' => 'Reiseführer',
'slides' => $pages
]);
}
public function travelMagazineSidebarWidgetAction(TravelCountry $country)
{
$repo = $this->getEntityManager()->getRepository('AppBundle:Page');
$rootPage = $repo->find(2803);
$pages = $repo->getChildrenQueryBuilder($rootPage)
->andWhere('IDENTITY(node.country) = '. $country->getId())
->setMaxResults(3)
->getQuery()
->execute()
;
return $this->render('default/components/sidebar/textSliderSidebarWidget.html.twig', [
'slider_title' => 'Reisemagazin',
'slides' => $pages
]);
}
public function offersSidebarWidgetAction(TravelCountry $country)
{
$pages = $this->getEntityManager()->getRepository('AppBundle:Page')->findWithTravelProgramsOfCountry($country);
return $this->render('default/components/sidebar/pageSliderSidebarWidget.html.twig', [
'slider_title' => 'Angebote',
'pages' => $pages
]);
}
/*
Suche Kindknoten
Für jeden Kindknoten

View file

@ -1,7 +1,9 @@
<?php
namespace AppBundle\Entity;
use Gedmo\Tree\Entity\Repository\NestedTreeRepository;
use Doctrine\ORM\Query\Expr;
/**
* PageRepository
@ -41,6 +43,73 @@ class PageRepository extends NestedTreeRepository
return $pages;
}
public function findWithTravelProgramsOfCountry(TravelCountry $country)
{
return $this->createQueryBuilder('node')
->innerJoin('node.travelProgram', 'tp')
->innerJoin('tp.countries', 'c')
->where('c.id = '. $country->getId())
->getQuery()
->execute()
;
}
/**
* @return Page[]
*/
public function findOffers()
{
$ret = [];
$countries = $this->getEntityManager()->getRepository('AppBundle:TravelCountry')->findAll();
foreach ($countries as $country)
{
$ret = array_merge($ret, $this->createQueryBuilder('node')
->innerJoin('node.travelProgram', 'tp')
->addSelect('tp')
->innerJoin('tp.countries', 'c')
->where('c.id = '. $country->getId())
->andWhere('node.status > 0')
->andWhere('tp.status > 0')
->orderBy('node.order')
->addOrderBy('tp.position')
->addOrderBy('node.title')
->setMaxResults(3)
->getQuery()
->execute()
);
}
shuffle($ret);
return $ret;
}
public function findCountryPages()
{
return $this->createQueryBuilder('node')
->innerJoin('node.country', 'country')
->where('node.status > 0')
->andWhere('node.template = \'overview\'')
->andWhere('node.lvl = 0')
->orderBy('node.lft,node.title')
->getQuery()
->execute()
;
}
public function findTopCountryNavPages()
{
return $this->createQueryBuilder('node')
->innerJoin('node.country', 'country')
->leftJoin('node.children', 'childPage', Expr\Join::WITH, 'childPage.status > 0')
->addSelect('childPage')
->where('node.status > 0')
->andWhere('node.template = \'overview\'')
->andWhere('node.lvl = 0')
->orderBy('node.lft,node.title,childPage.lft,childPage.title')
->getQuery()
->execute()
;
}
/**
* @param Page $page
*

View file

@ -2,7 +2,7 @@ jQuery(document).ready(function($) {
"use strict";
/* ==============================================
VIDEOS
VIDEOS -->
=============================================== */
var videos$ = $('a[id^="video_"]');
@ -61,7 +61,7 @@ jQuery(document).ready(function($) {
});
/* ==============================================
KEYWORDS
KEYWORDS -->
=============================================== */
var modal$ = $('#st-default-modal');
@ -77,6 +77,65 @@ jQuery(document).ready(function($) {
return false;
});
/* ==============================================
SIDEBAR BOX SLIDER -->
=============================================== */
function createSlider(ctx$)
{
function setSlideInterval()
{
if(slideInterval)
{
clearInterval(slideInterval);
}
slideInterval = setInterval(function() {
jumpToNextSlide();
}, 5000);
}
function jumpToNextSlide()
{
setActiveSlide(slideIndex === slideCount - 1 ? 0 : slideIndex + 1);
setSlideInterval();
}
function setActiveSlide(newIndex)
{
slide$s[slideIndex].removeClass('active');
slideIndex = newIndex;
slide$s[slideIndex].addClass('active');
}
var slides$ = $('.slide', ctx$);
var slideCount = slides$.length;
if(slideCount > 1)
{
var slideInterval;
var slide$s = [];
for(var i = 0; i < slideCount; ++i)
{
slide$s.push($(slides$.get(i)));
}
var slideIndex = 0;
setSlideInterval();
$('.item-button-next', ctx$).click(function() {
jumpToNextSlide();
});
$('.item-button-prev', ctx$).click(function() {
setActiveSlide(slideIndex === 0 ? slideCount - 1 : slideIndex - 1);
setSlideInterval();
});
}
}
$('.box-slider').each(function() {
createSlider($(this));
});
/* ==============================================
HEADER STICKY -->
=============================================== */