* 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:
parent
353b758bcd
commit
4278e110fc
12 changed files with 305 additions and 381 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
=============================================== */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue