Merge branch 'feature/no-repost-warning' into develop

This commit is contained in:
Björn Fromme
2019-09-08 13:13:16 +02:00
21 changed files with 173 additions and 189 deletions
+3 -14
View File
@@ -128,22 +128,11 @@ routeEnhancers:
- 41 - 41
routes: routes:
- -
routePath: /ergebnis routePath: '/ergebnis/{filter_settings}'
_controller: 'Search::searchresult' _controller: 'Search::searchresult'
defaultController: 'Search::searchresult'
StaticResultsPlugin:
type: Extbase
extension: EpProducts
plugin: staticresult
limitToPages:
- 1757
routes:
-
routePath: '/{filter_settings}'
_controller: 'Search::staticresult'
_arguments: _arguments:
filter_settings: encodedFilterSettings filter_settings: filterSettings
defaultController: 'Search::staticresult' defaultController: 'Search::searchresult'
requirements: requirements:
filter_settings: '[A-Z\d%\-]+' filter_settings: '[A-Z\d%\-]+'
ResellerPlugin: ResellerPlugin:
@@ -173,7 +173,6 @@ class ProductController extends ActionController
$this->view->assignMultiple([ $this->view->assignMultiple([
'hotels' => $hotels, 'hotels' => $hotels,
'product' => $product, 'product' => $product,
'currentPageUid' => $GLOBALS['TSFE']->id,
'linkHotel' => true, 'linkHotel' => true,
]); ]);
} }
@@ -27,6 +27,7 @@ namespace EP\EpProducts\Controller;
* This copyright notice MUST APPEAR in all copies of the script! * This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/ ***************************************************************/
use EP\EpEvents\Domain\Model\Search;
use EP\EpProducts\Domain\Model\FilterSettings; use EP\EpProducts\Domain\Model\FilterSettings;
use EP\EpProducts\Domain\Model\SearchParams; use EP\EpProducts\Domain\Model\SearchParams;
use EP\EpProducts\Service\FilterService; use EP\EpProducts\Service\FilterService;
@@ -36,7 +37,6 @@ use TYPO3\CMS\Core\Log\LogManager;
use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException; use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
class SearchController extends ActionController class SearchController extends ActionController
{ {
@@ -102,24 +102,46 @@ class SearchController extends ActionController
]); ]);
} }
public function initializeSearchresultAction() public function initializeProcessSearchAction()
{ {
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true); $forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
$this->processSearchParamsArgument($forcedConceptUids); $this->processSearchParamsArgument($forcedConceptUids);
}
/**
* @param SearchParams $searchParams
* @throws StopActionException
* @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException
*/
public function processSearchAction(SearchParams $searchParams)
{
$filterSettings = FilterSettings::fromSearchParams($searchParams);
$redirectUri = $this->uriBuilder
->reset()
->setCreateAbsoluteUri(true)
->uriFor(
'searchresult',
['filterSettings' => FilterSettingsEncoder::encode($filterSettings)],
null,
null,
'searchresult'
);
$this->redirectToUri($redirectUri);
}
public function initializeSearchresultAction()
{
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
$this->processFilterSettingsArgument($forcedConceptUids); $this->processFilterSettingsArgument($forcedConceptUids);
} }
/** /**
* @param \EP\EpProducts\Domain\Model\SearchParams $searchParams
* @param \EP\EpProducts\Domain\Model\FilterSettings $filterSettings * @param \EP\EpProducts\Domain\Model\FilterSettings $filterSettings
*/ */
public function searchresultAction(SearchParams $searchParams = null, FilterSettings $filterSettings = null) public function searchresultAction(FilterSettings $filterSettings)
{ {
if ($searchParams !== null) {
$this->logSearch($searchParams);
$filterSettings = FilterSettings::fromSearchParams($searchParams);
}
$this->view->assignMultiple([ $this->view->assignMultiple([
'detailPageUid' => $this->settings['detailPageUid'], 'detailPageUid' => $this->settings['detailPageUid'],
'referringPageUid' => $this->settings['defaultSearchPageUid'], 'referringPageUid' => $this->settings['defaultSearchPageUid'],
@@ -127,20 +149,6 @@ class SearchController extends ActionController
]); ]);
} }
/**
* @param string $encodedFilterSettings
* @throws StopActionException
*/
public function staticresultAction($encodedFilterSettings)
{
$this->forward(
'searchresult',
null,
null,
['filterSettings' => $encodedFilterSettings]
);
}
/** /**
* @param SearchParams $searchParams * @param SearchParams $searchParams
*/ */
@@ -42,7 +42,7 @@ class StaticSearchParamsMiddleware implements MiddlewareInterface
use DbConnectionTrait; use DbConnectionTrait;
const PREFIX_PATH_SEGMENT = 'reiseauswahl'; const PREFIX_PATH_SEGMENT = 'reiseauswahl';
const SEARCH_RESULT_URI = '/skireisen/auswahl/'; const SEARCH_RESULT_URI = '/skireisen/suche/ergebnis/';
const REDIRECT_RESPONSE_CODE = 302; const REDIRECT_RESPONSE_CODE = 302;
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
@@ -17,12 +17,6 @@ call_user_func(function () {
'Suchergebnis' 'Suchergebnis'
); );
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.EpProducts',
'staticresult',
'statisches Suchergebnis'
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.EpProducts', 'EP.EpProducts',
'product_detail', 'product_detail',
@@ -20,8 +20,6 @@ plugin.tx_epproducts {
snowReportStoragePid = snowReportStoragePid =
# cat=plugin.tx_epproducts//a; type=string; label=Default search page UID # cat=plugin.tx_epproducts//a; type=string; label=Default search page UID
defaultSearchPageUid = defaultSearchPageUid =
# cat=plugin.tx_epproducts//a; type=string; label=Default static search page UID
defaultStaticSearchPageUid =
# cat=plugin.tx_epproducts//a; type=string; label=Default product detail page UID # cat=plugin.tx_epproducts//a; type=string; label=Default product detail page UID
defaultDetailPageUid = defaultDetailPageUid =
# cat=plugin.tx_epproducts//a; type=string; label=Exclude products with concept UIDs from search result (CSV) # cat=plugin.tx_epproducts//a; type=string; label=Exclude products with concept UIDs from search result (CSV)
@@ -27,7 +27,6 @@ plugin.tx_epproducts {
destinationsStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} destinationsStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid}
snowReportStoragePid = {$plugin.tx_epproducts.settings.snowReportStoragePid} snowReportStoragePid = {$plugin.tx_epproducts.settings.snowReportStoragePid}
defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid} defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid}
defaultStaticSearchPageUid = {$plugin.tx_epproducts.settings.defaultStaticSearchPageUid}
defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid} defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid}
excludedConceptUids = {$plugin.tx_epproducts.settings.excludedConceptUids} excludedConceptUids = {$plugin.tx_epproducts.settings.excludedConceptUids}
excludedRegionUids = {$plugin.tx_epproducts.settings.excludedRegionUids} excludedRegionUids = {$plugin.tx_epproducts.settings.excludedRegionUids}
@@ -50,21 +50,10 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks'][\EP\EpProducts\T
'EP.' . $_EXTKEY, 'EP.' . $_EXTKEY,
'searchresult', 'searchresult',
[ [
'Search' => 'searchresult', 'Search' => 'searchresult,processSearch',
], ],
[ [
'Search' => 'searchresult', 'Search' => 'searchresult,processSearch',
]
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'EP.' . $_EXTKEY,
'staticresult',
[
'Search' => 'staticresult',
],
[
'Search' => 'staticresult',
] ]
); );
@@ -30,8 +30,8 @@ import ContactForm from './components/ContactForm.vue'
import WatchlistToggle from './components/WatchlistToggle.vue' import WatchlistToggle from './components/WatchlistToggle.vue'
import Watchlist from './components/Watchlist.vue' import Watchlist from './components/Watchlist.vue'
import HotelList from './components/HotelList.vue' import HotelList from './components/HotelList.vue'
import ReferrerLink from './components/ReferrerLink.vue'
import FacebookPixel from './components/FacebookPixel.vue' import FacebookPixel from './components/FacebookPixel.vue'
import BackLink from './components/BackLink.vue'
// Define global constants // Define global constants
const $window = $(window); const $window = $(window);
@@ -64,7 +64,7 @@ new Vue({
WatchlistToggle, WatchlistToggle,
Watchlist, Watchlist,
HotelList, HotelList,
ReferrerLink, BackLink,
MyEp: () => import('./myep/components/App.vue'), MyEp: () => import('./myep/components/App.vue'),
FacebookPixel FacebookPixel
}, },
@@ -0,0 +1,31 @@
<template>
<div class="ep-backlink" v-if="referringUrl" v-cloak>
<a :href="referringUrl" class="button button--small">{{ label }}</a>
</div>
</template>
<script>
export default {
name: 'BackLink',
data () {
return {
referringUrl: null,
}
},
computed: {
label () {
if (this.referringUrl.match(/suche/)) {
return 'zurück zum Suchergebnis'
}
return 'zurück'
}
},
mounted () {
const urlParams = new URLSearchParams(location.search);
if (urlParams.has('ref')) {
this.referringUrl = urlParams.get('ref');
}
}
}
</script>
@@ -1,13 +1,11 @@
<script> <script>
import WatchlistToggle from './WatchlistToggle.vue' import WatchlistToggle from './WatchlistToggle.vue'
import ReferrerLink from './ReferrerLink.vue'
import defaultFilterSettings from '../_filtersettings' import defaultFilterSettings from '../_filtersettings'
export default { export default {
components: { components: {
WatchlistToggle, WatchlistToggle
ReferrerLink
}, },
props: { props: {
referringPageUrl: { referringPageUrl: {
@@ -14,6 +14,7 @@
import FacebookPixel from './FacebookPixel.vue' import FacebookPixel from './FacebookPixel.vue'
import WatchlistToggle from './WatchlistToggle.vue' import WatchlistToggle from './WatchlistToggle.vue'
import OsmMap from './OsmMap.vue' import OsmMap from './OsmMap.vue'
import BackLink from "./BackLink.vue";
import dayjs from 'dayjs' import dayjs from 'dayjs'
import 'dayjs/locale/de' import 'dayjs/locale/de'
@@ -29,7 +30,8 @@
Calendar, Calendar,
FacebookPixel, FacebookPixel,
WatchlistToggle, WatchlistToggle,
OsmMap OsmMap,
BackLink
}, },
data () { data () {
return { return {
@@ -1,28 +0,0 @@
<template>
<a @click="storeReferringPage()">
<slot></slot>
</a>
</template>
<script>
export default {
props: {
referringPage: {
type: Object,
default () {
return {
url: null,
label: null
}
}
}
},
methods: {
storeReferringPage () {
if (this.referringPage.url && this.referringPage.label) {
sessionStorage.setItem('referringPage', JSON.stringify(this.referringPage))
}
}
}
}
</script>
@@ -204,14 +204,11 @@
}, },
updateFilterSettings (settings) { updateFilterSettings (settings) {
this.filterSettings = { ...this.filterSettings, ...settings }; this.filterSettings = { ...this.filterSettings, ...settings };
sessionStorage.setItem('filterSettings', JSON.stringify(this.filterSettings));
} }
}, },
created () { created () {
if (!$.isEmptyObject(this.initialFilterSettings)) { if (!$.isEmptyObject(this.initialFilterSettings)) {
this.updateFilterSettings(this.initialFilterSettings) this.updateFilterSettings(this.initialFilterSettings)
} else if (sessionStorage.getItem('filterSettings')) {
this.updateFilterSettings(JSON.parse(sessionStorage.getItem('filterSettings')))
} }
}, },
mounted () { mounted () {
@@ -2,17 +2,16 @@
<div class="teaserbox teaserbox--landscape teaserbox--searchresult searchresult-item"> <div class="teaserbox teaserbox--landscape teaserbox--searchresult searchresult-item">
<div class="teaserbox__image"> <div class="teaserbox__image">
<img class="teaserbox__flag" :src="item.country.flag" :alt="item.country.name"/> <img class="teaserbox__flag" :src="item.country.flag" :alt="item.country.name"/>
<referrer-link :href="item.detailPageUri" :referring-page="referringPage" <a :href="getUrl()" rel="nofollow" title="Details &amp; Buchen">
rel="nofollow" title="Details &amp; Buchen">
<picture class="searchresult-item__image"> <picture class="searchresult-item__image">
<source media="(max-width: 768px)" :data-srcset="item.hotel.images.resized.s[0].url + ' 220w'"/>
<source media="(max-width: 1200px)" :data-srcset="item.hotel.images.resized.l[0].url + ' 280w'"/>
<source media="(min-width: 1201px)" :data-srcset="item.hotel.images.resized.m[0].url + ' 260w'"/> <source media="(min-width: 1201px)" :data-srcset="item.hotel.images.resized.m[0].url + ' 260w'"/>
<source media="(max-width: 1200px)" :data-srcset="item.hotel.images.resized.l[0].url + ' 280w'"/>
<source media="(max-width: 768px)" :data-srcset="item.hotel.images.resized.s[0].url + ' 220w'"/>
<img class="scale lazyload" :data-src="item.hotel.images.resized.s[0].url" <img class="scale lazyload" :data-src="item.hotel.images.resized.s[0].url"
:title="item.hotel.images.resized.s[0].title" :title="item.hotel.images.resized.s[0].title"
:alt="item.hotel.images.resized.s[0].alt"> :alt="item.hotel.images.resized.s[0].alt">
</picture> </picture>
</referrer-link> </a>
<div class="concept-badge" :id="section.concept.code" <div class="concept-badge" :id="section.concept.code"
:class=" 'concept-badge--' + section.concept.code">{{ section.concept.name }}</div> :class=" 'concept-badge--' + section.concept.code">{{ section.concept.name }}</div>
</div> </div>
@@ -45,21 +44,21 @@
<div class="teaserbox__aside__top"> <div class="teaserbox__aside__top">
<span class="searchresult-item__label">{{ item.dates.length > 1 ? 'Zeitraum' : 'Termin' }}</span> <span class="searchresult-item__label">{{ item.dates.length > 1 ? 'Zeitraum' : 'Termin' }}</span>
<span class="searchresult-item__daterange">{{ dateRange }}</span> <span class="searchresult-item__daterange">{{ dateRange }}</span>
<referrer-link :href="item.detailPageUri" :referring-page="referringPage" <a :href="getUrl()" rel="nofollow" title="Details &amp; Buchen"
rel="nofollow" title="Details &amp; Buchen" v-if="item.dates.length && !item.daytrip"> v-if="item.dates.length && !item.daytrip">
<span class="searchresult-item__daterange"> <span class="searchresult-item__daterange">
<i class="fa fa-arrow-circle-right"></i> {{ item.dates.length }} Termin{{ item.dates.length > 1 ? 'e' : '' }} <i class="fa fa-arrow-circle-right"></i> {{ item.dates.length }} Termin{{ item.dates.length > 1 ? 'e' : '' }}
</span> </span>
</referrer-link> </a>
<hr> <hr>
<span class="searchresult-item__label">{{ item.daytrip ? 'Tageweise buchbar' : nightsOptions }}</span> <span class="searchresult-item__label">{{ item.daytrip ? 'Tageweise buchbar' : nightsOptions }}</span>
</div> </div>
<div class="teaserbox__aside__bottom"> <div class="teaserbox__aside__bottom">
<span class="searchresult-item__price">ab {{ item.minPrice }} </span> <span class="searchresult-item__price">ab {{ item.minPrice }} </span>
<referrer-link :href="item.detailPageUri" :referring-page="referringPage" <a :href="getUrl()" class="button button--full searchresult-item__button"
class="button button--full searchresult-item__button" rel="nofollow" title="Details &amp; Buchen"> rel="nofollow" title="Details &amp; Buchen">
Details &amp; Buchen Details &amp; Buchen
</referrer-link> </a>
</div> </div>
</div> </div>
<watchlist-toggle :uid="item.key" class="teaserbox-watchlist"></watchlist-toggle> <watchlist-toggle :uid="item.key" class="teaserbox-watchlist"></watchlist-toggle>
@@ -70,12 +69,10 @@
import dayjs from 'dayjs' import dayjs from 'dayjs'
import 'dayjs/locale/de' import 'dayjs/locale/de'
import WatchlistToggle from './WatchlistToggle.vue' import WatchlistToggle from './WatchlistToggle.vue'
import ReferrerLink from './ReferrerLink.vue'
export default { export default {
components: { components: {
WatchlistToggle, WatchlistToggle
ReferrerLink
}, },
props: { props: {
item: { item: {
@@ -85,15 +82,11 @@
section: { section: {
type: Object, type: Object,
required: true required: true
}
}, },
referringPage: { methods: {
type: Object, getUrl () {
default () { return this.item.detailPageUri + '?ref=' + window.location.pathname;
return {
url: null,
label: null
}
}
} }
}, },
computed: { computed: {
@@ -10,10 +10,13 @@
<img class="teaserbox__flag" <img class="teaserbox__flag"
src="{item.country.flag}" src="{item.country.flag}"
alt="{item.country.name}"/> alt="{item.country.name}"/>
<referrer-link href="{f:uri.action(pageUid: detailPage, action: 'detail', controller: 'Product', arguments: '{product: product.uid, hotel: item.hotel.uid}')}" <f:link.action action="detail" controller="Product"
:referring-page="{ url: referringPageUrl, label: 'zurück' }" rel="nofollow"> pageUid="{detailPage}"
arguments="{product: product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: '{f:uri.page()}'}"
>
<f:render section="Image" arguments="{_all}"/> <f:render section="Image" arguments="{_all}"/>
</referrer-link> </f:link.action>
<f:if condition="{product.concept.code}"> <f:if condition="{product.concept.code}">
<div class="concept-badge concept-badge--{product.concept.code}">{product.concept.name}</div> <div class="concept-badge concept-badge--{product.concept.code}">{product.concept.name}</div>
</f:if> </f:if>
@@ -70,32 +73,46 @@
<span class="searchresult-item__label">{f:if(condition: '{item.dates -> f:count()} > 1', then: 'Zeitraum', else: 'Termin')}</span> <span class="searchresult-item__label">{f:if(condition: '{item.dates -> f:count()} > 1', then: 'Zeitraum', else: 'Termin')}</span>
<span class="searchresult-item__daterange">{ep:dateRange(dateFrom: item.minDateStart, dateTo: item.maxDateEnd, includeLabel: 0)}</span> <span class="searchresult-item__daterange">{ep:dateRange(dateFrom: item.minDateStart, dateTo: item.maxDateEnd, includeLabel: 0)}</span>
<f:if condition="{item.dates -> f:count()} > 1"> <f:if condition="{item.dates -> f:count()} > 1">
<referrer-link href="{f:uri.action(pageUid: detailPage, action: 'detail', controller: 'Product', arguments: '{product: product.uid, hotel: item.hotel.uid}')}" <f:link.action action="detail" controller="Product"
:referring-page="{ url: referringPageUrl, label: 'zurück' }" rel="nofollow"> pageUid="{detailPage}"
arguments="{product: product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: '{f:uri.page()}'}"
additionalAttributes="{rel: 'nofollow'}"
>
<span class="searchresult-item__daterange"> <span class="searchresult-item__daterange">
<i class="fa fa-arrow-circle-right"></i> {item.dates -> f:count()} Termin{f:if(condition: '{item.dates -> f:count()} > 1', then: 'e')} <i class="fa fa-arrow-circle-right"></i> {item.dates -> f:count()} Termin{f:if(condition: '{item.dates -> f:count()} > 1', then: 'e')}
</span> </span>
</referrer-link> </f:link.action>
</f:if> </f:if>
<hr> <hr>
<span class="searchresult-item__label">{ep:nightsOptions(options: item.nights)}</span> <span class="searchresult-item__label">{ep:nightsOptions(options: item.nights)}</span>
</div> </div>
<div class="teaserbox__aside__bottom"> <div class="teaserbox__aside__bottom">
<span class="searchresult-item__price">ab {item.minPrice} €</span> <span class="searchresult-item__price">ab {item.minPrice} €</span>
<referrer-link href="{f:uri.action(pageUid: detailPage, action: 'detail', controller: 'Product', arguments: '{product: product.uid, hotel: item.hotel.uid}')}" <f:link.action action="detail" controller="Product"
:referring-page="{ url: referringPageUrl, label: 'zurück' }" pageUid="{detailPage}"
class="button button--full searchresult-item__button" rel="nofollow"> arguments="{product: product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: '{f:uri.page()}'}"
additionalAttributes="{rel: 'nofollow'}"
class="button button--full searchresult-item__button"
>
Details &amp; Buchen Details &amp; Buchen
</referrer-link> </f:link.action>
</div> </div>
</f:then> </f:then>
<f:else> <f:else>
<div class="teaserbox__aside__top">&nbsp;</div> <div class="teaserbox__aside__top">&nbsp;</div>
<div class="teaserbox__aside__bottom"> <div class="teaserbox__aside__bottom">
<span class="searchresult-item__price">ausgebucht</span> <span class="searchresult-item__price">ausgebucht</span>
<referrer-link href="{f:uri.action(pageUid: detailPage, action: 'detail', controller: 'Product', arguments: '{product: product.uid, hotel: item.hotel.uid}')}" <f:link.action action="detail" controller="Product"
:referring-page="{ url: referringPageUrl, label: 'zurück' }" pageUid="{detailPage}"
class="button button--full searchresult-item__button" rel="nofollow">Details</referrer-link> arguments="{product: product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: '{f:uri.page()}'}"
additionalAttributes="{rel: 'nofollow'}"
class="button button--full searchresult-item__button"
>
Details
</f:link.action>
</div> </div>
</f:else> </f:else>
</f:if> </f:if>
@@ -109,15 +126,15 @@
<f:then> <f:then>
<f:alias map="{image: item.hotel.images.original.0}"> <f:alias map="{image: item.hotel.images.original.0}">
<picture class="searchresult-item__image"> <picture class="searchresult-item__image">
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
image: image, width: '220', height: '130c-100'
)} 220w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
image: image, width: '280', height: '220c-100'
)} 280w"/>
<source media="(min-width: 1201px)" data-srcset="{f:uri.image( <source media="(min-width: 1201px)" data-srcset="{f:uri.image(
image: image, width: '260', height: '200c-100' image: image, width: '260', height: '200c-100'
)} 260w"/> )} 260w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
image: image, width: '280', height: '220c-100'
)} 280w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
image: image, width: '220', height: '130c-100'
)} 220w"/>
<img class="scale lazyload" data-src="{f:uri.image( <img class="scale lazyload" data-src="{f:uri.image(
image: image, width: '260', height: '200c-100' image: image, width: '260', height: '200c-100'
)}" title="{image.title}" alt="{image.alternative}"> )}" title="{image.title}" alt="{image.alternative}">
@@ -126,18 +143,18 @@
</f:then> </f:then>
<f:else> <f:else>
<picture class="searchresult-item__image"> <picture class="searchresult-item__image">
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '220', height: '130c-100'
)} 220w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '280', height: '220c-100'
)} 280w"/>
<source media="(min-width: 1201px)" data-srcset="{f:uri.image( <source media="(min-width: 1201px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg', src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '260', height: '200c-100' width: '260', height: '200c-100'
)} 260w"/> )} 260w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '280', height: '220c-100'
)} 280w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '220', height: '130c-100'
)} 220w"/>
<img class="scale lazyload" data-src="{f:uri.image( <img class="scale lazyload" data-src="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg', src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '260', height: '200c-100' width: '260', height: '200c-100'
@@ -60,8 +60,6 @@
</f:link.typolink> </f:link.typolink>
</f:if> </f:if>
</div> </div>
<div class="ep-backlink" v-if="referringPage" v-cloak> <back-link></back-link>
<a :href="referringPage.url" class="button button--small">{{ referringPage.label }}</a>
</div>
{v:render.template(file: 'EXT:ep_theme/Resources/Private/Partials/Breadcrumb.html')} {v:render.template(file: 'EXT:ep_theme/Resources/Private/Partials/Breadcrumb.html')}
</div> </div>
@@ -1,21 +1,21 @@
<f:if condition="{image.uid}"> <f:if condition="{image.uid}">
<f:then> <f:then>
<picture> <picture>
<source media="(max-width: 512px)" data-srcset="{f:uri.image(
image: image, width: '350', height: '175c-100'
)} 350w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
image: image, width: '500', height: '250c-100'
)} 500w"/>
<source media="(max-width: 991px)" data-srcset="{f:uri.image(
image: image, width: '360', height: '200c-100'
)} 360w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
image: image, width: '320', height: '160c-100'
)} 320w"/>
<source media="(min-width: 1201px)" data-srcset="{f:uri.image( <source media="(min-width: 1201px)" data-srcset="{f:uri.image(
image: image, width: '370', height: '220c-100' image: image, width: '370', height: '220c-100'
)} 370w"/> )} 370w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
image: image, width: '320', height: '160c-100'
)} 320w"/>
<source media="(max-width: 991px)" data-srcset="{f:uri.image(
image: image, width: '360', height: '200c-100'
)} 360w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
image: image, width: '500', height: '250c-100'
)} 500w"/>
<source media="(max-width: 512px)" data-srcset="{f:uri.image(
image: image, width: '350', height: '175c-100'
)} 350w"/>
<img class="scale lazyload" data-src="{f:uri.image( <img class="scale lazyload" data-src="{f:uri.image(
image: image, width: '500', height: '250c-100' image: image, width: '500', height: '250c-100'
)}" title="{image.title}" alt="{image.alternative}"> )}" title="{image.title}" alt="{image.alternative}">
@@ -23,26 +23,26 @@
</f:then> </f:then>
<f:else> <f:else>
<picture> <picture>
<source media="(max-width: 512px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '350', height: '175c-100'
)} 320w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '500', height: '250c-100'
)} 500w"/>
<source media="(max-width: 991px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '360', height: '200c-100'
)} 360w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '320', height: '160c-100'
)} 420w"/>
<source media="(min-width: 1201px)" data-srcset="{f:uri.image( <source media="(min-width: 1201px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg', src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '370', height: '220c-100' width: '370', height: '220c-100'
)} 370w"/> )} 370w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '320', height: '160c-100'
)} 420w"/>
<source media="(max-width: 991px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '360', height: '200c-100'
)} 360w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '500', height: '250c-100'
)} 500w"/>
<source media="(max-width: 512px)" data-srcset="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '350', height: '175c-100'
)} 320w"/>
<img class="scale lazyload" data-src="{f:uri.image( <img class="scale lazyload" data-src="{f:uri.image(
src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg', src: 'EXT:ep_theme/Resources/Public/images/header-winter.jpg',
width: '500', height: '250c-100' width: '500', height: '250c-100'
@@ -1,17 +1,17 @@
<f:if condition="{image}"> <f:if condition="{image}">
<f:then> <f:then>
<picture class="product-teaser__image"> <picture class="product-teaser__image">
<source media="(max-width: 768px)" data-srcset="{f:uri.image( <source media="(min-width: 1201px)" data-srcset="{f:uri.image(
image: image, width: '320', height: '140c-100' image: image, width: '320', height: '200c-100'
)} 320w"/> )} 320w"/>
<source media="(max-width: 991px)" data-srcset="{f:uri.image(
image: image, width: '260', height: '220c-100'
)} 260w"/>
<source media="(max-width: 1200px)" data-srcset="{f:uri.image( <source media="(max-width: 1200px)" data-srcset="{f:uri.image(
image: image, width: '220', height: '130c-100' image: image, width: '220', height: '130c-100'
)} 220w"/> )} 220w"/>
<source media="(min-width: 1201px)" data-srcset="{f:uri.image( <source media="(max-width: 991px)" data-srcset="{f:uri.image(
image: image, width: '320', height: '200c-100' image: image, width: '260', height: '220c-100'
)} 260w"/>
<source media="(max-width: 768px)" data-srcset="{f:uri.image(
image: image, width: '320', height: '140c-100'
)} 320w"/> )} 320w"/>
<img class="scale lazyload" data-src="{f:uri.image( <img class="scale lazyload" data-src="{f:uri.image(
image: image, width: '260', height: '160c-100' image: image, width: '260', height: '160c-100'
@@ -17,7 +17,7 @@
inline-template> inline-template>
<div class="container searchbar affix{f:if(condition: fixed, else: '-top')}"{f:if(condition: fixed, else: ' data-spy="affix" data-offset-top="650" data-offset-bottom="200"')}> <div class="container searchbar affix{f:if(condition: fixed, else: '-top')}"{f:if(condition: fixed, else: ' data-spy="affix" data-offset-top="650" data-offset-bottom="200"')}>
<div class="container"> <div class="container">
<f:form action="searchresult" controller="Search" method="post" name="searchParams" <f:form action="processSearch" controller="Search" method="post" name="searchParams"
object="{searchParams}" pluginName="searchresult" extensionName="epproducts" object="{searchParams}" pluginName="searchresult" extensionName="epproducts"
pageUid="{settings.defaultSearchPageUid}" additionalAttributes="{ref: 'form'}"> pageUid="{settings.defaultSearchPageUid}" additionalAttributes="{ref: 'form'}">
<f:form.hidden property="destinationUid" additionalAttributes="{v-model: 'searchParams.destinationUid', number: 'number'}"/> <f:form.hidden property="destinationUid" additionalAttributes="{v-model: 'searchParams.destinationUid', number: 'number'}"/>
@@ -16,7 +16,7 @@
:date-presets='{settings.datePickerPresets -> v:format.json.encode()}' :date-presets='{settings.datePickerPresets -> v:format.json.encode()}'
inline-template> inline-template>
<div class="container"> <div class="container">
<f:form action="searchresult" controller="Search" method="post" name="searchParams" <f:form action="processSearch" controller="Search" method="post" name="searchParams"
object="{searchParams}" pluginName="searchresult" extensionName="epproducts" object="{searchParams}" pluginName="searchresult" extensionName="epproducts"
pageUid="{settings.defaultSearchPageUid}" class="form-horizontal"> pageUid="{settings.defaultSearchPageUid}" class="form-horizontal">
<f:form.hidden property="destinationUid" additionalAttributes="{v-model: 'searchParams.destinationUid', number: 'number'}"/> <f:form.hidden property="destinationUid" additionalAttributes="{v-model: 'searchParams.destinationUid', number: 'number'}"/>