* Sidebar-Suchmaske

* Letzter Breadcrum-Eintrag ist kein Link
* Sonstige Links im Layout (Impressum, etc.)
* Vorschaubox-Anpassungen: page.box_body wurde nicht berücksichtigt; page.box_image_url wird jetzt gegenüber travelProgram.previewImage bevorzugt; Standard-Vorschaubild geändert
* page.pagetitle gegenüber page.title als Seitenüberschrift bevorzugen
* Fertigstellung Reiseprogrammseite; zu Tab-Inhalt scrollen; Bei Klick auf Buchen-Knopf zu Termintabelle scrollen (auch von der Suchseite aus)
* Aufteilung der Vorschau-Boxen in vermittelte und nicht-vermittelte Reisen, falls es beide gibt
* Falls page.real_path_url gesetzt wird => Eine Seite kann nicht mehr über den slug-Pfad (<eltern-seite>/<seite>) aufgerufen werden (Sonst gäbe es mehrere URLs für die gleiche Seite)

git-svn-id: http://78.47.251.156/svn/dev/sterntours-3@3295 f459cee4-fb09-11de-96c3-f9c5f16c3c76
This commit is contained in:
uli 2017-02-17 08:24:48 +00:00
parent 4c2fb2fd08
commit 20beca7c4d
25 changed files with 564 additions and 112 deletions

View file

@ -83,7 +83,7 @@ class BookingController extends Controller
if ($action == '/buchen')
{
$breadcrumbEntries = Util::createBreadcrumb($travelProgramPage);
$breadcrumbEntries[] = new BreadcrumbEntry('Buchen', $travelProgramPage->getUrlPath() .'/buchen');
$breadcrumbEntries[] = new BreadcrumbEntry('Buchen');
if ($request->getMethod() == 'POST' && $form->isValid())
{

View file

@ -2,8 +2,10 @@
namespace AppBundle\Controller;
use AppBundle\Entity\BreadcrumbEntry;
use AppBundle\Entity\Page;
use AppBundle\Entity\TravelProgram;
use AppBundle\Form\SearchRequestType;
use AppBundle\Util;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\Expr;
@ -74,10 +76,35 @@ class DefaultController extends Controller
$childPages =
$this->getEntityManager()->getRepository('AppBundle:Page')->getChildrenWithTravelProgramsAndDates($page);
$nonMediated = [];
$mediated = [];
foreach ($childPages as $childPage)
{
if ($childPage->getStatus() == 1 && $childPage->getTravelProgram() &&
$childPage->getTravelProgram()->getIsMediated())
{
$mediated[] = $childPage;
}
else
{
$nonMediated[] = $childPage;
}
}
// We only need a separation if there are mediated AND non mediated travel programs
if (empty($nonMediated) && !empty($mediated))
{
$childPages = $mediated;
}
else
{
$childPages = $nonMediated;
}
return $this->render('default/pages/travelProgramOverview.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'page' => $page,
'child_pages' => $childPages
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'page' => $page,
'child_pages' => $childPages,
'mediated_child_pages' => $mediated,
]);
}
@ -98,28 +125,38 @@ class DefaultController extends Controller
*/
public function searchAction(Request $request)
{
$stopwatch = $this->get('debug.stopwatch');
$em = $this->getEntityManager();
$destinationIds = null;
$destination = $em->getRepository('AppBundle:TravelCountry')->find($request->query->get('c'));
if ($destination)
{
$destinationsIds = [$destination->getId()];
}
$startDate = $request->query->has('b')
? \DateTime::createFromFormat('d.m.Y', $request->query->get('b'))
: new \DateTime();
$endDate = \DateTime::createFromFormat('d.m.Y', $request->query->get('e'));
$form = $this->createForm(SearchRequestType::class);
$form->handleRequest($request);
$stopwatch->start('search');
$r = $this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTravelProgramsWithTravelDatesForTimePeriod(
$startDate, $endDate, $destinationIds, true);
$stopwatch->stop('search');
if ($form->isValid())
{
$data = $form->getData();
$destinationIds = [];
if (!empty($data['c']))
{
$destinationIds = [$data['c']->getId()];
}
if (!empty($destinationIds) && !empty($data['c2']))
{
$destinationIds[] = $data['c2']->getId();
}
$r = $this->getDoctrine()->getRepository('AppBundle:TravelPeriod')->getTravelProgramsWithTravelDatesForTimePeriod(
$data['b'], $data['e'], $destinationIds, count($destinationIds) > 1);
}
else
{
$r = [];
}
return $this->render('default/pages/search.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'travel_programs' => $r
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'breadcrumb_entries' => [new BreadcrumbEntry('Suchen')],
'search_form' => $form->createView(),
'travel_programs' => $r,
]);
}
@ -139,8 +176,8 @@ class DefaultController extends Controller
->execute()
;
return $this->render('default/components/header.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'nav_pages' => $navPages
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'nav_pages' => $navPages,
]);
}
@ -148,7 +185,7 @@ class DefaultController extends Controller
{
return $this->render('default/components/breadcrumb.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'breadcrumb_entries' => Util::createBreadcrumb($page)
'breadcrumb_entries' => Util::createBreadcrumb($page),
]);
}
@ -200,6 +237,32 @@ class DefaultController extends Controller
return $this->render('default/components/sidebar/navSidebarWidget.html.twig', $view);
}
public function searchSidebarWidgetAction(Page $page)
{
$combinedDestination = null;
if ($page->getTravelProgram())
{
$countries = $page->getTravelProgram()->getCountries();
$destination = $countries->first();
if (count($countries) > 1)
{
$combinedDestination = $countries[1];
}
}
else
{
$destination = $page->getCountry();
}
return $this->render('default/components/sidebar/searchSidebarWidget.html.twig', [
'search_form' => $this->createForm(SearchRequestType::class, [
'b' => new \DateTime('+5 day'),
'e' => new \DateTime('+19 day'),
'c' => $destination,
'c2' => $combinedDestination,
])->createView()
]);
}
/*
Suche Kindknoten
Für jeden Kindknoten