feat: hotel, region, city, country and concept plugins, FAQ, team, maps and price table on TYPO3 13
Controllers, templates and FlexForms restored from a46918d, ported with
Rector/Fractor and by hand (settings and rows missing from older
records read as empty, as PHP 7.4 did). They stay list_type plugins for
now. The pages match TYPO3 10 apart from data that changed since (dates,
prices, edited texts).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
53faeccb70
commit
a042eff41d
48 files changed
+3100
-75
No files matched your search
@@ -74,7 +74,7 @@ class ContainerViewHelper extends AbstractViewHelper
|
||||
$content = $this->arguments['content'];
|
||||
}
|
||||
$classes = [];
|
||||
if (\in_array($this->arguments['data']['colPos'], static::$columnsWithoutContainers, false)) {
|
||||
if (\in_array($this->arguments['data']['colPos'] ?? null, static::$columnsWithoutContainers, false)) {
|
||||
$classes[] = 'container';
|
||||
}
|
||||
if ($this->arguments['cssClasses'] !== null) {
|
||||
@@ -88,8 +88,8 @@ class ContainerViewHelper extends AbstractViewHelper
|
||||
$scaleBottom = static::$scale[$this->arguments['data']['space_after_class']];
|
||||
$classes[] = sprintf('pb-%d', $scaleBottom);
|
||||
}
|
||||
if ('default' !== $this->arguments['data']['frame_class']) {
|
||||
$classes[] = $this->arguments['data']['frame_class'];
|
||||
if ('default' !== ($this->arguments['data']['frame_class'] ?? null)) {
|
||||
$classes[] = $this->arguments['data']['frame_class'] ?? null;
|
||||
}
|
||||
if (count($classes) > 0) {
|
||||
return sprintf('<div class="%s"%s>%s</div>', implode(' ', $classes), $this->arguments['rteContent'] ? ' data-rte-content' : '', $content);
|
||||
|
||||
@@ -1,64 +1,59 @@
|
||||
<?xml version="1.0"?>
|
||||
<T3DataStructure>
|
||||
<meta>
|
||||
<langDisable>1</langDisable>
|
||||
</meta>
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<TCEforms>
|
||||
<sheetTitle>Konfiguration</sheetTitle>
|
||||
</TCEforms>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<buttons>
|
||||
<section>1</section>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<container>
|
||||
<title>Button</title>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<label>
|
||||
<TCEforms>
|
||||
<label>Label</label>
|
||||
<config>
|
||||
<type>input</type>
|
||||
<size>32</size>
|
||||
</config>
|
||||
</TCEforms>
|
||||
</label>
|
||||
<link>
|
||||
<TCEforms>
|
||||
<exclude>1</exclude>
|
||||
<label>Button</label>
|
||||
<config>
|
||||
<type>input</type>
|
||||
<eval>trim</eval>
|
||||
<size>30</size>
|
||||
<wizards type="array">
|
||||
<_PADDING type="integer">2</_PADDING>
|
||||
<link type="array">
|
||||
<type>popup</type>
|
||||
<title>Link</title>
|
||||
<icon>EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_link.gif</icon>
|
||||
<module>
|
||||
<name>wizard_link</name>
|
||||
<urlParameters>
|
||||
<mode>wizard</mode>
|
||||
</urlParameters>
|
||||
</module>
|
||||
<JSopenParams>height=300,width=500,status=0,menubar=0,scrollbars=1</JSopenParams>
|
||||
</link>
|
||||
</wizards>
|
||||
</config>
|
||||
</TCEforms>
|
||||
</link>
|
||||
</el>
|
||||
</container>
|
||||
</el>
|
||||
</buttons>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
<meta>
|
||||
<langDisable>1</langDisable>
|
||||
</meta>
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<sheetTitle>Konfiguration</sheetTitle>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<buttons>
|
||||
<section>1</section>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<container>
|
||||
<title>Button</title>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<label>
|
||||
<label>Label</label>
|
||||
<config>
|
||||
<type>input</type>
|
||||
<size>32</size>
|
||||
</config>
|
||||
</label>
|
||||
<link>
|
||||
<exclude>1</exclude>
|
||||
<label>Button</label>
|
||||
<config>
|
||||
<type>input</type>
|
||||
<eval>trim</eval>
|
||||
<size>30</size>
|
||||
<wizards type="array">
|
||||
<_PADDING type="integer">2</_PADDING>
|
||||
<link type="array">
|
||||
<type>popup</type>
|
||||
<title>Link</title>
|
||||
<icon>EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_link.gif</icon>
|
||||
<module>
|
||||
<name>wizard_link</name>
|
||||
<urlParameters>
|
||||
<mode>wizard</mode>
|
||||
</urlParameters>
|
||||
</module>
|
||||
<JSopenParams>height=300,width=500,status=0,menubar=0,scrollbars=1</JSopenParams>
|
||||
</link>
|
||||
</wizards>
|
||||
</config>
|
||||
</link>
|
||||
</el>
|
||||
</container>
|
||||
</el>
|
||||
</buttons>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
</T3DataStructure>
|
||||
@@ -0,0 +1,68 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
|
||||
|
||||
<div class="herounit h-80 lg:h-96 mb-8">
|
||||
<f:alias map="{headerImage: images.0}">
|
||||
<f:if condition="{headerImage}">
|
||||
<picture>
|
||||
<source srcset="{f:uri.image(image: headerImage, width: '1370c', height: '360')}" media="(min-width: 768px)">
|
||||
<source srcset="{f:uri.image(image: headerImage, width: '640c', height: '320')}" media="(max-width: 767px)">
|
||||
<f:image class="block w-full h-full object-cover"
|
||||
image="{headerImage}"
|
||||
height="640"
|
||||
alt="{headerImage.alternative}"/>
|
||||
</picture>
|
||||
</f:if>
|
||||
</f:alias>
|
||||
<div class="absolute bottom-0 left-0 inset-x-0 px-8 md:bottom-1/2 md:translate-y-1/2">
|
||||
<div class="lg:container px-0">
|
||||
<div class="bg-ep-primary/80 sbw:bg-sbw-primary/80 snz:bg-snz-primary/80 uch:bg-uch-primary/80 py-4 lg:py-8 px-4 mb-8 md:max-w-1/2 p-16">
|
||||
<span class="block text-xl md:text-2xl font-light text-white uppercase">
|
||||
{topline}
|
||||
</span>
|
||||
<span class="block text-2xl md:text-3xl lg:text-4xl text-white uppercase">
|
||||
{headline}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{headerImage.originaldescription}">
|
||||
<div class="pagehead__picturecredit">{headerImage.description -> f:format.htmlspecialchars()}</div>
|
||||
</f:if>
|
||||
<f:if condition="{settings.showSkipassBadge} || {badge}">
|
||||
<div class="herounit__badge-wrapper">
|
||||
<f:if condition="{settings.showSkipassBadge}">
|
||||
<f:link.typolink parameter="{settings.skipassPageUid}">
|
||||
<div class="herounit__badge herounit__badge--skipass">
|
||||
<p class="uppercase text-4xl font-bold leading-7 mb-2">Ski-<br>Pass</p>
|
||||
<p class="uppercase">inklusive</p>
|
||||
</div>
|
||||
</f:link.typolink>
|
||||
</f:if>
|
||||
<f:if condition="{badge}">
|
||||
<f:alias map="{badgeData: badge.0.data}">
|
||||
<f:link.typolink parameter="{badgeData.link}">
|
||||
<div class="herounit__badge herounit__badge--custom">
|
||||
<svg viewBox="0 0 200 200"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
class="w-full h-full">
|
||||
<circle fill="currentColor" class="text-ep-primary-dark/50" cx="100" cy="100" r="100"/>
|
||||
<circle fill="currentColor" class="text-ep-primary-dark" cx="100" cy="100" r="70"/>
|
||||
</svg>
|
||||
<div class="absolute top-0 left-0 inset-0 flex flex-col items-center justify-center p-8">
|
||||
<span class="block text-center text-white uppercase font-bold leading-none text-xl">{badgeData.title -> f:format.raw()}</span>
|
||||
<f:if condition="{badgeData.subtitle}">
|
||||
<span class="block text-center text-white uppercase font-bold leading-none">{badgeData.subtitle -> f:format.raw()}</span>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</f:link.typolink>
|
||||
</f:alias>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,31 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers"
|
||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:render partial="SubpageHeader"
|
||||
arguments="{images: city.headerImages, topline: city.headerSubtitle, headline: city.headerTitle, settings: settings}"/>
|
||||
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
||||
<div class="container">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{layout: 8, subheader: city.name, header: city.headline}"/>
|
||||
<div class="grid grid-cols-3 gap-8">
|
||||
<div class="col-span-3 lg:col-span-2">
|
||||
<f:render partial="City/Details" arguments="{city: city, teasers: teasers}"/>
|
||||
</div>
|
||||
<div class="col-span-3 lg:col-span-1">
|
||||
<f:render partial="Facts" arguments="{facts: city.facts, title: city.name}"/>
|
||||
<f:if condition="{city.region.winter}">
|
||||
<f:render partial="Snowreport" arguments="{snowreport: city.region.snowreport}"/>
|
||||
<f:render partial="Regioninfo" arguments="{region: city.region}"/>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,46 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<ep:container data="{data}">
|
||||
<f:if condition="{teasers}">
|
||||
<div data-controller="teasergrid"
|
||||
data-teasergrid-grid-class="grid-cols-2"
|
||||
data-teasergrid-disabled-value="false">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{header: data.header, subheader: data.subheader, layout: data.header_layout, link: data.header_link, default: settings.defaultHeaderType}" />
|
||||
<div class="flex items-center space-x-1 mb-2 sm:hidden">
|
||||
<button type="button"
|
||||
class="opacity-50"
|
||||
aria-label="kompakte Ansicht"
|
||||
data-action="teasergrid#grid"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-grid"></use>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button"
|
||||
aria-label="vergrößerte Ansicht"
|
||||
data-action="teasergrid#block"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-single"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 lg:grid-cols-3 gap-4 md:gap-8"
|
||||
data-teasergrid-target="container">
|
||||
<f:for each="{teasers}" as="city">
|
||||
<f:render partial="City/Teaser" section="Teaser" arguments="{_all}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</ep:container>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,123 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:if condition="{settings.hideHeader}">
|
||||
<f:else>
|
||||
<f:render partial="SubpageHeader"
|
||||
arguments="{images: concept.headerImages, topline: concept.headerSubtitle, headline: concept.headerTitle, settings: settings}"/>
|
||||
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<div class="container">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{layout: 8, subheader: concept.name, header: concept.headline}"/>
|
||||
<div class="grid grid-cols-3 gap-8">
|
||||
<div class="col-span-3 lg:col-span-2">
|
||||
<div data-rte-content>
|
||||
{concept.description -> f:format.html()}
|
||||
</div>
|
||||
<f:if condition="{teasers}">
|
||||
<f:then>
|
||||
<a class="anchor" id="teasers"></a>
|
||||
<div class="bg-zinc-50 p-4 mb-4"
|
||||
data-controller="teasergrid"
|
||||
data-teasergrid-grid-class="grid-cols-2"
|
||||
data-teasergrid-disabled-value="false">
|
||||
<div class="flex items-center space-x-1 mb-2 sm:hidden">
|
||||
<button type="button"
|
||||
class="opacity-50"
|
||||
aria-label="kompakte Ansicht"
|
||||
data-action="teasergrid#grid"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-grid"></use>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button"
|
||||
aria-label="vergrößerte Ansicht"
|
||||
data-action="teasergrid#block"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-single"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 xl:grid-cols-3 gap-4 md:gap-8"
|
||||
data-teasergrid-target="container">
|
||||
<f:for each="{teasers}" as="teaser" iteration="iteration">
|
||||
<f:render partial="Product/Teaser" section="Teaser" arguments="{
|
||||
concept: teaser.concept,
|
||||
hotel: teaser.hotel,
|
||||
product: teaser.product,
|
||||
country: teaser.country,
|
||||
region: teaser.region,
|
||||
productImage: teaser.product.images.original.0,
|
||||
nights: teaser.nights,
|
||||
board: teaser.board,
|
||||
minPrice: teaser.minPrice,
|
||||
daytrip: teaser.daytrip,
|
||||
season: teaser.season,
|
||||
forceHotelUid: teaser.forceHotelUid,
|
||||
dateFrom: dateFrom,
|
||||
dateTo: dateTo,
|
||||
index: iteration.index,
|
||||
skiPassIncluded: teaser.skiPassIncluded
|
||||
}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
<f:if condition="{settings.hideMoreLink}">
|
||||
<f:else>
|
||||
<div class="text-right mt-4">
|
||||
<f:link.typolink class="button bg-button"
|
||||
parameter="{settings.defaultSearchPageUid}"
|
||||
additionalParams="f={filterSettings -> ep:filterSettingsEncoder()}">
|
||||
Alle anzeigen
|
||||
</f:link.typolink>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{concept.images -> f:count()} > 0">
|
||||
<f:render partial="ImageGallery" arguments="{images: concept.images, id: 'concept-{concept.uid}', thumbnails: 1}"/>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{concept.descriptionExtended}">
|
||||
<div data-rte-content>
|
||||
{concept.descriptionExtended -> f:format.html()}
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{teasers}">
|
||||
<f:if condition="{concept.images -> f:count()} > 0">
|
||||
<f:render partial="ImageGallery" arguments="{images: concept.images, id: 'concept-{concept.uid}', thumbnails: 1}"/>
|
||||
</f:if>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="col-span-3 lg:col-span-1">
|
||||
<ul class="list-none p-0 m-0 space-y-2">
|
||||
<f:for each="{pages}" as="page">
|
||||
<f:if condition="{page.hidden}">
|
||||
<f:else>
|
||||
<li>
|
||||
<f:link.typolink parameter="{page.uid}"
|
||||
class="button bg-button {f:if(condition: '{data.pid} == {page.uid}', then: 'bg-button--active', else: 'bg-button--light')} w-full">
|
||||
{page.title}
|
||||
</f:link.typolink>
|
||||
</li>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,46 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:if condition="{teasers}">
|
||||
<ep:container data="{data}">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{header: data.header, subheader: data.subheader, layout: data.header_layout, link: data.header_link, default: settings.defaultHeaderType}" />
|
||||
<div data-controller="teasergrid"
|
||||
data-teasergrid-grid-class="grid-cols-2"
|
||||
data-teasergrid-disabled-value="false">
|
||||
<div class="flex items-center space-x-1 mb-2 sm:hidden">
|
||||
<button type="button"
|
||||
class="opacity-50"
|
||||
aria-label="kompakte Ansicht"
|
||||
data-action="teasergrid#grid"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-grid"></use>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button"
|
||||
aria-label="vergrößerte Ansicht"
|
||||
data-action="teasergrid#block"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-single"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 lg:grid-cols-3 gap-4 md:gap-8"
|
||||
data-teasergrid-target="container">
|
||||
<f:for each="{teasers}" as="city">
|
||||
<f:render partial="Concept/Teaser" section="Teaser" arguments="{_all}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</ep:container>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,130 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers"
|
||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:render partial="SubpageHeader"
|
||||
arguments="{images: country.headerImages, topline: country.headerSubtitle, headline: country.headerTitle, settings: settings}"/>
|
||||
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
||||
<div class="container">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{layout: 8, subheader: country.name, header: country.headline}"/>
|
||||
<div class="grid grid-cols-3 gap-8">
|
||||
<div class="col-span-3 lg:col-span-2" id="teasers">
|
||||
<div data-rte-content>
|
||||
{country.description -> f:format.html()}
|
||||
</div>
|
||||
<f:if condition="{teasers}">
|
||||
<div class="bg-zinc-50 p-4 mb-4"
|
||||
data-controller="teasergrid"
|
||||
data-teasergrid-grid-class="grid-cols-2"
|
||||
data-teasergrid-disabled-value="false">
|
||||
<f:if condition="{teasers -> f:count()} <= 2">
|
||||
<f:then>
|
||||
<div class="grid gap-4 md:gap-8">
|
||||
<f:for each="{teasers}" as="teaser" iteration="iteration">
|
||||
<f:render partial="Product/Teaser" section="Teaser" arguments="{
|
||||
landscape: 1,
|
||||
concept: teaser.concept,
|
||||
hotel: teaser.hotel,
|
||||
product: teaser.product,
|
||||
country: teaser.country,
|
||||
region: teaser.region,
|
||||
productImage: teaser.product.images.original.0,
|
||||
nights: teaser.nights,
|
||||
board: teaser.board,
|
||||
minPrice: teaser.minPrice,
|
||||
daytrip: teaser.daytrip,
|
||||
season: teaser.season,
|
||||
forceHotelUid: teaser.forceHotelUid,
|
||||
dateFrom: dateFrom,
|
||||
dateTo: dateTo,
|
||||
index: iteration.index,
|
||||
globalConceptCode: settings.globalConceptCode,
|
||||
skiPassIncluded: teaser.skiPassIncluded
|
||||
}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="flex items-center space-x-1 mb-2 sm:hidden">
|
||||
<button type="button"
|
||||
class="opacity-50"
|
||||
aria-label="kompakte Ansicht"
|
||||
data-action="teasergrid#grid"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-grid"></use>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button"
|
||||
aria-label="vergrößerte Ansicht"
|
||||
data-action="teasergrid#block"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-single"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 xl:grid-cols-3 gap-4 md:gap-8"
|
||||
data-teasergrid-target="container">
|
||||
<f:for each="{teasers}" as="teaser" iteration="iteration">
|
||||
<f:render partial="Product/Teaser" section="Teaser" arguments="{
|
||||
concept: teaser.concept,
|
||||
hotel: teaser.hotel,
|
||||
product: teaser.product,
|
||||
country: teaser.country,
|
||||
region: teaser.region,
|
||||
productImage: teaser.product.images.original.0,
|
||||
nights: teaser.nights,
|
||||
board: teaser.board,
|
||||
minPrice: teaser.minPrice,
|
||||
daytrip: teaser.daytrip,
|
||||
season: teaser.season,
|
||||
forceHotelUid: teaser.forceHotelUid,
|
||||
dateFrom: dateFrom,
|
||||
dateTo: dateTo,
|
||||
index: iteration.index,
|
||||
globalConceptCode: settings.globalConceptCode,
|
||||
skiPassIncluded: teaser.skiPassIncluded
|
||||
}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{settings.hideMoreLink}">
|
||||
<f:else>
|
||||
<div class="text-right mt-4">
|
||||
<f:link.typolink class="button bg-button"
|
||||
parameter="{settings.defaultSearchPageUid}"
|
||||
additionalParams="f={filterSettings -> ep:filterSettingsEncoder()}">
|
||||
Alle anzeigen
|
||||
</f:link.typolink>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{country.descriptionExtended}">
|
||||
<div data-rte-content>
|
||||
{country.descriptionExtended -> f:format.html()}
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{country.images -> f:count()} > 0">
|
||||
<f:render partial="ImageGallery" arguments="{images: country.images, id: 'country-{country.uid}'}"/>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="col-span-3 lg:col-span-1">
|
||||
<f:render partial="Facts" arguments="{facts: country.facts, title: country.name}"/>
|
||||
<f:render partial="Officetip" arguments="{officetip: country.officetip}"/>
|
||||
<f:render partial="Snowreport" arguments="{snowreport: country.snowreport}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers"
|
||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:render partial="Faq" arguments="{settings: settings, faqs: faqs, filter: 1}"/>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,27 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<div>
|
||||
<ep:container data="{data}">
|
||||
<div class="splide"
|
||||
data-controller="slider"
|
||||
data-slider-preset-value="teasers">
|
||||
<div class="splide__track">
|
||||
<ul class="splide__list">
|
||||
<f:for each="{teasers}" as="hotel">
|
||||
<li class="splide__slide">
|
||||
<f:render partial="Hotel/TeaserSimple" section="Teaser" arguments="{_all}"/>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</ep:container>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,37 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers"
|
||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:render partial="SubpageHeader"
|
||||
arguments="{images: hotel.headerImages, topline: hotel.headerSubtitle, headline: hotel.headerTitle, settings: settings}"/>
|
||||
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
||||
<div class="container">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{layout: 8, subheader: hotel.name, header: hotel.headline}"/>
|
||||
<div class="grid grid-cols-3 gap-8">
|
||||
<div class="col-span-3 md:col-span-2">
|
||||
<f:render partial="Hotel/Details"
|
||||
arguments="{hotel: hotel, teasers: teasers, filterSettings: filterSettings, showNonBookableHint: 1}"/>
|
||||
</div>
|
||||
<div class="col-span-3 md:col-span-1">
|
||||
<f:render partial="Facts" arguments="{facts: hotel.facts, title: hotel.name}"/>
|
||||
<f:if condition="{hotel.region.winter}">
|
||||
<f:render partial="Snowreport" arguments="{snowreport: hotel.region.snowreport}"/>
|
||||
<f:render partial="Regioninfo" arguments="{region: hotel.region}"/>
|
||||
</f:if>
|
||||
<div class="bg-zinc-50 p-4">
|
||||
<p><strong>Lage</strong></p>
|
||||
<div>
|
||||
<f:render partial="Map/Osm" arguments="{settings: settings, lat: hotel.latitude, lng: hotel.longitude, externalLink: '{f:uri.typolink(parameter: hotel.externalLink)}'}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,39 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{layout: 8, subheader: hotel.name, header: hotel.headline}"/>
|
||||
<div class="grid grid-cols-2 gap-8">
|
||||
<div class="col-span-2 md:col-span-1">
|
||||
<f:render partial="ImageGallery"
|
||||
arguments="{id: hotel.uid, images: hotel.images, thumbnails: 0}"/>
|
||||
</div>
|
||||
<div class="col-span-2 md:col-span-1">
|
||||
{hotel.description -> f:format.html()}
|
||||
</div>
|
||||
</div>
|
||||
<div data-rte-content>
|
||||
<f:if condition="{product.bookable}">
|
||||
<h2>Buchungsoptionen</h2>
|
||||
<div class="ajax-content-wrapper"
|
||||
hx-get="{ep:uri.ajax(action: 'pricetableHtml', controller: 'AjaxTable', pageUid: settings.defaultAjaxUid, arguments: '{product: product, hotel: hotel, bookingUrlTemplateCode: settings.bookingUrlTemplateCode}', format: 'html')}"
|
||||
hx-trigger="revealed">
|
||||
<f:image src="EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif" alt="Loading" title="Loading"/>
|
||||
</div>
|
||||
</f:if>
|
||||
<h2>Ausstattung</h2>
|
||||
{hotel.features -> f:format.html()}
|
||||
<h2>Zimmerarten / Apartments</h2>
|
||||
{hotel.roomTypes -> f:format.html()}
|
||||
<f:if condition="{hotel.additionalInformation}">
|
||||
<h2>Zusatzinformationen</h2>
|
||||
{hotel.additionalInformation -> f:format.html()}
|
||||
</f:if>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,54 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:if condition="{bookable} || {nonBookable}">
|
||||
<ep:container data="{data}">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{header: data.header, subheader: data.subheader, layout: data.header_layout, link: data.header_link, default: settings.defaultHeaderType}" />
|
||||
<div data-controller="teasergrid"
|
||||
data-teasergrid-grid-class="grid-cols-2"
|
||||
data-teasergrid-disabled-value="false">
|
||||
<div class="flex items-center space-x-1 mb-2 sm:hidden">
|
||||
<button type="button"
|
||||
class="opacity-50"
|
||||
aria-label="kompakte Ansicht"
|
||||
data-action="teasergrid#grid"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-grid"></use>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button"
|
||||
aria-label="vergrößerte Ansicht"
|
||||
data-action="teasergrid#block"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-single"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 lg:grid-cols-3 gap-4 md:gap-8"
|
||||
data-teasergrid-target="container">
|
||||
<f:for each="{bookable}" as="hotel" iteration="iteration">
|
||||
<f:render partial="Hotel/Teaser" section="Teaser" arguments="{
|
||||
hotel: hotel,
|
||||
index: iteration.index
|
||||
}"/>
|
||||
</f:for>
|
||||
<f:for each="{nonBookable}" as="hotel" iteration="iteration">
|
||||
<f:render partial="Hotel/Teaser" section="Teaser" arguments="{
|
||||
hotel: hotel,
|
||||
index: iteration.index
|
||||
}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</ep:container>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:if condition="{markerData}">
|
||||
<ep:container data="{data}">
|
||||
<f:render partial="Map/Osm" arguments="{settings: settings, class: 'mb-8', markers: markerData}"/>
|
||||
</ep:container>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<div class="ajax-content-wrapper"
|
||||
hx-get="{ep:uri.ajax(extensionName: 'epproducts', action: 'eventPricetable', controller: 'AjaxTable', pageUid: settings.defaultAjaxUid, arguments: {product: productUid}, format: 'html')}"
|
||||
hx-trigger="revealed">
|
||||
<f:image src="EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif" alt="Loading" title="Loading"/>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,34 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers"
|
||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<f:render partial="SubpageHeader"
|
||||
arguments="{images: region.headerImages, topline: region.headerSubtitle, headline: region.headerTitle, settings: settings, badge: badge}"/>
|
||||
<f:cObject typoscriptObjectPath="lib.breadcrumb"/>
|
||||
<div class="container">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{layout: 8, subheader: region.name, header: region.headline}"/>
|
||||
<div class="grid grid-cols-3 gap-8">
|
||||
<div class="col-span-3 lg:col-span-2">
|
||||
<f:render partial="Region/Details" arguments="{region: region, teasers: teasers, filterSettings: filterSettings}"/>
|
||||
</div>
|
||||
<div class="col-span-3 lg:col-span-1">
|
||||
<f:if condition="{region.winter}">
|
||||
<f:render partial="Facts" arguments="{facts: region.facts, title: region.name}"/>
|
||||
<f:render partial="Snowreport" arguments="{snowreport: region.snowreport}"/>
|
||||
<f:render partial="Regioninfo" arguments="{region: region}"/>
|
||||
<f:render partial="Region/Webcam" arguments="{region: region}"/>
|
||||
<f:render partial="RegionMaps" arguments="{region: region}"/>
|
||||
<f:render partial="RegionAward" arguments="{region: region}"/>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,46 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<ep:container data="{data}">
|
||||
<f:if condition="{teasers}">
|
||||
<div data-controller="teasergrid"
|
||||
data-teasergrid-grid-class="grid-cols-2"
|
||||
data-teasergrid-disabled-value="false">
|
||||
<f:render partial="Header/Header"
|
||||
arguments="{header: data.header, subheader: data.subheader, layout: data.header_layout, link: data.header_link, default: settings.defaultHeaderType}" />
|
||||
<div class="flex items-center space-x-1 mb-2 sm:hidden">
|
||||
<button type="button"
|
||||
class="opacity-50"
|
||||
aria-label="kompakte Ansicht"
|
||||
data-action="teasergrid#grid"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-grid"></use>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button"
|
||||
aria-label="vergrößerte Ansicht"
|
||||
data-action="teasergrid#block"
|
||||
data-teasergrid-target="button">
|
||||
<svg class="w-12 h-12 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-teaser-single"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 lg:grid-cols-3 gap-4 md:gap-8"
|
||||
data-teasergrid-target="container">
|
||||
<f:for each="{teasers}" as="region">
|
||||
<f:render partial="Region/Teaser" section="Teaser" arguments="{_all}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</ep:container>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,49 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<div class="container">
|
||||
<f:for each="{members -> v:iterator.chunk(count: 4)}" as="group">
|
||||
<div class="grid grid-cols-4 gap-8 mb-8">
|
||||
<f:for each="{group}" as="member">
|
||||
<f:render section="Member" arguments="{member: member}"/>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Member">
|
||||
<div class="col-span-4 sm:col-span-2 md:col-span-1">
|
||||
<a href="{f:uri.action(
|
||||
pageUid: settings.teamShowPID,
|
||||
action: 'show',
|
||||
extensionName: 'epproducts',
|
||||
pluginName: 'teammembers',
|
||||
arguments: '{member: member}'
|
||||
)}">
|
||||
<f:if condition="{member.image}">
|
||||
<f:image image="{member.image}"
|
||||
loading="lazy"
|
||||
class="block w-full h-auto rounded-full"
|
||||
width="400"
|
||||
height="400c"
|
||||
alt="{member.name}"/>
|
||||
</f:if>
|
||||
<div class="text-center text-zinc-800 pt-2">
|
||||
<span class="block font-bold text-xl">
|
||||
{member.name}
|
||||
</span>
|
||||
<span class="block">
|
||||
{member.tasks -> f:format.nl2br()}
|
||||
</span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,48 @@
|
||||
<html data-namespace-typo3-fluid="true" lang="en"
|
||||
xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
|
||||
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="Main">
|
||||
<div class="container">
|
||||
<div class="grid grid-cols-3 gap-8">
|
||||
<div class="col-span-3 md:col-span-1 px-8">
|
||||
<f:if condition="{member.image}">
|
||||
<f:image class="rounded-full" image="{member.image}" width="400" height="400c" title="{member.name}" alt="{member.name}"/>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="col-span-3 md:col-span-2">
|
||||
<f:render partial="Header/Header" arguments="{header: member.name, subheader: member.tasks, layout: 8}" />
|
||||
<div data-rte-content>
|
||||
{member.description -> f:format.html()}
|
||||
</div>
|
||||
<f:if condition="{member.email} || {member.phone}">
|
||||
<div class="mb-8 flex flex-col space-y-2">
|
||||
<f:if condition="{member.email}">
|
||||
<f:link.email class="flex items-center space-x-2" email="{member.email}">
|
||||
<svg class="w-6 h-6 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-email"></use>
|
||||
</svg>
|
||||
<span>{member.email}</span>
|
||||
</f:link.email>
|
||||
</f:if>
|
||||
<f:if condition="{member.phone}">
|
||||
<a class="flex items-center space-x-2" href="tel:{member.phone -> v:format.pregReplace(pattern: '/[\-\s]/', replacement: '')}" rel="nofollow">
|
||||
<svg class="w-6 h-6 text-ep-primary">
|
||||
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-phone"></use>
|
||||
</svg>
|
||||
<span>{member.phone}</span>
|
||||
</a>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
<a href="javascript:history.back()" class="button bg-button">
|
||||
zurück
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
Reference in new issue
Block a user