WIP Continue migration
This commit is contained in:
@@ -65,12 +65,13 @@ class ConceptController extends ActionController
|
|||||||
$conceptUid = $this->settings['conceptUid'];
|
$conceptUid = $this->settings['conceptUid'];
|
||||||
$concept = $this->conceptRepository->findByIdentifier($conceptUid);
|
$concept = $this->conceptRepository->findByIdentifier($conceptUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
$teaserConceptUids = GeneralUtility::trimExplode(',', $this->settings['additionalConceptUids']);
|
$teaserConceptUids = GeneralUtility::trimExplode(',', $this->settings['additionalConceptUids']);
|
||||||
if (null !== $concept) {
|
if (null !== $concept) {
|
||||||
array_unshift($teaserConceptUids, $concept->getUid());
|
array_unshift($teaserConceptUids, $concept->getUid());
|
||||||
}
|
}
|
||||||
$filterSettings = new FilterSettings();
|
|
||||||
$filterSettings->setConceptUids($teaserConceptUids);
|
$filterSettings = ['conceptUids' => $teaserConceptUids];
|
||||||
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true);
|
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true);
|
||||||
$limit = $this->settings['showMoreLink'] ? 4 : 0;
|
$limit = $this->settings['showMoreLink'] ? 4 : 0;
|
||||||
$teasers = $this->productDataService->getTeasergroup($filterSettings, $excludedConceptUids, $limit);
|
$teasers = $this->productDataService->getTeasergroup($filterSettings, $excludedConceptUids, $limit);
|
||||||
|
|||||||
@@ -1,38 +1,43 @@
|
|||||||
<html data-namespace-typo3-fluid="true" lang="en"
|
<html data-namespace-typo3-fluid="true" lang="en"
|
||||||
xmlns="http://www.w3.org/1999/xhtml"
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers"
|
|
||||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
|
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
|
||||||
|
|
||||||
<div class="container-fluid ep-disturber ep-expert-small" data-rte-content>
|
<div class="bg-winter my-2">
|
||||||
<div>
|
<div class="bg-ep-primary-80 sbw:bg-sbw-primary-80 uch:bg-uch-primary-80">
|
||||||
<div>
|
<f:render partial="Disrupter/Outlines" section="Top1" arguments="{classes: 'hidden md:block transform -translate-y-2 text-white'}"/>
|
||||||
<div class="container">
|
<div class="max-w-screen-lg mx-auto" data-rte-content>
|
||||||
<div class="col-sm-2">
|
<div class="md:flex md:items-start py-4">
|
||||||
<f:if condition="{teaserImage}">
|
<div class="px-16 pb-4 md:px-4 md:pb-0 md:w-1/6">
|
||||||
<f:then>
|
<f:if condition="{teaserImage}">
|
||||||
<img class="scale lazyload" data-src="{f:uri.image(image: teaserImage, width: '400', height: '400c')}"
|
<f:then>
|
||||||
alt="{teaserImage.alternative}" title="{teaserImage.title}">
|
<img class="block w-full h-auto rounded-full lazyload"
|
||||||
</f:then>
|
data-src="{f:uri.image(image: teaserImage, width: '400', height: '400c')}"
|
||||||
<f:else>
|
alt="{teaserImage.alternative}" title="{teaserImage.title}">
|
||||||
<img class="scale" src="https://placehold.it/800x600" alt="">
|
</f:then>
|
||||||
</f:else>
|
<f:else>
|
||||||
</f:if>
|
<img class="block w-full h-auto rounded-full" src="https://placehold.it/800x600" alt="">
|
||||||
</div>
|
</f:else>
|
||||||
<div class="col-sm-10">
|
</f:if>
|
||||||
<span class="headline headline--3 headline--disturber">{data.header}</span>
|
</div>
|
||||||
{data.bodytext -> f:format.html()}
|
<div class="px-16 md:px-4 md:w-5/6 md:pl-8 text-center text-white md:text-left" data-rte-content>
|
||||||
<br>
|
<span class="headline--3 text-white uppercase">
|
||||||
<div class="row">
|
{data.header}
|
||||||
<f:for each="{data.flexForm.buttons}" as="button" iteration="iteration">
|
</span>
|
||||||
<f:if condition="{iteration.cycle} <= 3">
|
{data.bodytext -> f:format.html()}
|
||||||
<div class="col-sm-4"><f:link.typolink parameter="{button.container.link}" class="btn btn-warning btn-shadow">{button.container.label}</f:link.typolink></div>
|
<div class="flex flex-col space-y-4 md:flex-row md:items-center md:space-y-0 md:space-x-4">
|
||||||
</f:if>
|
<f:for each="{data.flexForm.buttons}" as="button" iteration="iteration">
|
||||||
</f:for>
|
<f:if condition="{iteration.cycle} <= 3">
|
||||||
</div>
|
<f:link.typolink parameter="{button.container.link}" class="button shadow-lg">
|
||||||
|
{button.container.label}
|
||||||
|
</f:link.typolink>
|
||||||
|
</f:if>
|
||||||
|
</f:for>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<f:render partial="Disrupter/Outlines" section="Bottom1" arguments="{classes: 'hidden md:block transform translate-y-2 text-white'}"/>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -9,71 +9,80 @@
|
|||||||
<f:section name="Main">
|
<f:section name="Main">
|
||||||
<f:render partial="SubpageHeader" arguments="{images: concept.headerImages, topline: concept.headerSubtitle, headline: concept.headerTitle, settings: settings}"/>
|
<f:render partial="SubpageHeader" arguments="{images: concept.headerImages, topline: concept.headerSubtitle, headline: concept.headerTitle, settings: settings}"/>
|
||||||
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
||||||
<div class="container">
|
<div class="bg-ep-primary-10 my-8 py-8">
|
||||||
<f:if condition="{teasers}">
|
<div class="container">
|
||||||
<div class="mb-8 lg:hidden">
|
<f:if condition="{teasers}">
|
||||||
<button class="button w-full mb-8"
|
<div class="mb-8 lg:hidden">
|
||||||
data-controller="scroll-to"
|
<button class="button w-full mb-8"
|
||||||
data-scroll-to-target-value="teasers"
|
data-controller="scroll-to"
|
||||||
data-action="scroll-to#scroll">
|
data-scroll-to-target-value="teasers"
|
||||||
Direkt zu den Angeboten
|
data-action="scroll-to#scroll">
|
||||||
</button>
|
Direkt zu den Angeboten
|
||||||
</div>
|
</button>
|
||||||
</f:if>
|
</div>
|
||||||
<f:render partial="Header/Header" arguments="{layout: 8, subheader: concept.name, header: concept.headline}"/>
|
</f:if>
|
||||||
<div class="grid grid-cols-3 gap-8">
|
<f:render partial="Header/Header" arguments="{layout: 8, subheader: concept.name, header: concept.headline}"/>
|
||||||
<div class="col-span-3 lg:col-span-2" data-rte-content>
|
<div class="grid grid-cols-3 gap-8">
|
||||||
{concept.description -> f:format.html()}
|
<div class="col-span-3 lg:col-span-2" data-rte-content>
|
||||||
<f:if condition="{teasers}">
|
{concept.description -> f:format.html()}
|
||||||
<div class="splide mb-4"
|
<f:if condition="{teasers}">
|
||||||
data-controller="slider"
|
<div class="flex flex-col space-y-4 md:space-y-8">
|
||||||
data-slider-preset-value="teasersEmbedded">
|
<f:for each="{teasers}" as="teaser" iteration="iteration">
|
||||||
<div class="splide__track">
|
<f:render partial="Product/Teaser" section="Teaser" arguments="{
|
||||||
<ul class="splide__list">
|
concept: teaser.concept,
|
||||||
<f:for each="{teasers}" as="teaser">
|
hotel: teaser.hotel,
|
||||||
<li class="splide__slide">
|
product: teaser.product,
|
||||||
<f:render partial="Product/Teaser" section="Teaser" arguments="{teaser: teaser}"/>
|
country: teaser.country,
|
||||||
</li>
|
region: teaser.region,
|
||||||
</f:for>
|
productImage: teaser.product.images.original.0,
|
||||||
</ul>
|
nights: teaser.nights,
|
||||||
|
board: teaser.board,
|
||||||
|
minPrice: teaser.minPrice,
|
||||||
|
daytrip: teaser.daytrip,
|
||||||
|
season: teaser.season,
|
||||||
|
forceHotelUid: teaser.forceHotelUid,
|
||||||
|
dateFrom: dateFrom,
|
||||||
|
dateTo: dateTo,
|
||||||
|
landscape: 1,
|
||||||
|
index: iteration.index
|
||||||
|
}"/>
|
||||||
|
</f:for>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<f:if condition="{settings.showMoreLink}">
|
||||||
<f:if condition="{settings.showMoreLink}">
|
<f:link.action pageUid="{settings.defaultStaticSearchPageUid}" class="button my-8"
|
||||||
<p class="text-right">
|
|
||||||
<f:link.action pageUid="{settings.defaultStaticSearchPageUid}" class="button"
|
|
||||||
action="staticresult" controller="Search"
|
action="staticresult" controller="Search"
|
||||||
arguments="{encodedFilterSettings: '{filterSettings -> ep:filterSettingsEncoder()}'}"
|
arguments="{encodedFilterSettings: '{filterSettings -> ep:filterSettingsEncoder()}'}"
|
||||||
additionalAttributes="{rel: 'nofollow'}">
|
additionalAttributes="{rel: 'nofollow'}">
|
||||||
Alle anzeigen
|
Alle anzeigen
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
|
</f:if>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{concept.descriptionExtended}">{concept.descriptionExtended -> f:format.html()}</f:if>
|
||||||
|
</div>
|
||||||
|
<div class="col-span-3 lg:col-span-1">
|
||||||
|
<f:if condition="{teasers}">
|
||||||
|
<p class="hidden lg:block">
|
||||||
|
<button class="button w-full mb-8"
|
||||||
|
data-controller="scroll-to"
|
||||||
|
data-scroll-to-target-value="teasers"
|
||||||
|
data-action="scroll-to#scroll">
|
||||||
|
Direkt zu den Angeboten
|
||||||
|
</button>
|
||||||
</p>
|
</p>
|
||||||
</f:if>
|
</f:if>
|
||||||
</f:if>
|
|
||||||
<f:if condition="{concept.descriptionExtended}">{concept.descriptionExtended -> f:format.html()}</f:if>
|
|
||||||
</div>
|
|
||||||
<div class="col-span-3 lg:col-span-1">
|
|
||||||
<f:if condition="{teasers}">
|
|
||||||
<p class="hidden lg:block">
|
|
||||||
<button class="button w-full mb-8"
|
|
||||||
data-controller="scroll-to"
|
|
||||||
data-scroll-to-target-value="teasers"
|
|
||||||
data-action="scroll-to#scroll">
|
|
||||||
Direkt zu den Angeboten
|
|
||||||
</button>
|
|
||||||
</p>
|
|
||||||
</f:if>
|
|
||||||
<v:menu pageUid="{settings.conceptsPageUid}" levels="1">
|
|
||||||
<ul class="list-none p-0 m-0 space-y-2">
|
<ul class="list-none p-0 m-0 space-y-2">
|
||||||
<f:for each="{menu}" as="page">
|
<v:menu pageUid="{settings.conceptPageUid}" as="menu">
|
||||||
<li>
|
<f:for each="{menu}" as="page">
|
||||||
<f:link.typolink parameter="{page.uid}"
|
<li>
|
||||||
class="btn btn-warning w-full{f:if(condition: '{page.active}', then: ' active')}">
|
<f:link.typolink parameter="{page.uid}"
|
||||||
{page.title}
|
class="button w-full">
|
||||||
</f:link.typolink>
|
{page.title}
|
||||||
</li>
|
</f:link.typolink>
|
||||||
</f:for>
|
</li>
|
||||||
|
</f:for>
|
||||||
|
</v:menu>
|
||||||
</ul>
|
</ul>
|
||||||
</v:menu>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user