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
@@ -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>
|
||||
Reference in new issue
Block a user