WIP Refactor filter/search logic

This commit is contained in:
Björn Fromme
2021-08-16 10:58:24 +02:00
parent f2b6f89633
commit d07c07786f
21 changed files with 285 additions and 1168 deletions
@@ -28,7 +28,6 @@ namespace EP\EpTheme\ViewHelpers;
***************************************************************/
use EP\EpProducts\Service\FilterSettingsEncoder;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
@@ -69,8 +68,8 @@ class FilterSettingsEncoderViewHelper extends AbstractViewHelper
return '';
}
/** @var \EP\EpProducts\Service\FilterSettingsEncoder $encoder */
$encoder = GeneralUtility::makeInstance(FilterSettingsEncoder::class);
return $encoder::encode($argument);
$encoder = new FilterSettingsEncoder();
return $encoder->encode($argument);
}
}
@@ -21,6 +21,9 @@
</f:if>
</div>
<div class="searchresult__content">
<f:if condition="{referringPageUri}">
<f:variable name="referrer" value="{referringPageUri}"/>
</f:if>
<f:for each="{searchResult}" as="section">
<div id="concept-{section.concept.uid}">
<h2 class="headline headline--secondary headline--underlined">
@@ -31,7 +34,11 @@
<div class="teaserbox teaserbox--landscape teaserbox--searchresult searchresult-item">
<div class="teaserbox__image">
<img src="{item.country.flag}" class="teaserbox__flag" alt="{item.country.name}"/>
<a href="{item.detailPageUri}" rel="nofollow" title="Details &amp; Buchen">
<f:link.action action="detail" controller="Product" extensionName="epproducts" pluginName="product_detail"
arguments="{product: item.product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: referrer}"
pageUid="{item.product.detailPage}" absolute="1"
rel="nofollow" title="Details &amp; Buchen">
<picture class="searchresult-item__image">
<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"/>
@@ -40,7 +47,7 @@
title="{item.hotel.images.resized.s.0.title}"
alt="{item.hotel.images.resized.s.0.alt}">
</picture>
</a>
</f:link.action>
<div class="concept-badge concept-badge--{section.concept.code}"
id="{section.concept.code}">
{section.concept.name}
@@ -106,11 +113,15 @@
<f:if condition="{item.dates -> f:count()} > 0">
<f:if condition="{item.daytrip}">
<f:else>
<a href="{item.detailPageUri}{f:if(condition: referringPageUri, then: '?ref={referringPageUri -> f:format.urlencode()}')}" rel="nofollow" title="Details &amp; Buchen">
<span class="searchresult-item__daterange">
<i class="fa fa-arrow-circle-right"></i> {item.dates -> f:count()} {f:if(condition: '{item.dates -> f:count()} > 1', then: 'Termine', else: 'Termin')}
</span>
</a>
<f:link.action action="detail" controller="Product" extensionName="epproducts" pluginName="product_detail"
arguments="{product: item.product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: referrer}"
pageUid="{item.product.detailPage}" absolute="1"
rel="nofollow" title="Details &amp; Buchen">
<span class="searchresult-item__daterange">
<i class="fa fa-arrow-circle-right"></i> {item.dates -> f:count()} {f:if(condition: '{item.dates -> f:count()} > 1', then: 'Termine', else: 'Termin')}
</span>
</f:link.action>
</f:else>
</f:if>
</f:if>
@@ -121,10 +132,14 @@
</div>
<div class="teaserbox__aside__bottom">
<span class="searchresult-item__price">ab {item.minPrice} €</span>
<a href="{item.detailPageUri}{f:if(condition: referringPageUri, then: '?ref={referringPageUri -> f:format.urlencode()}')}" class="button button--full searchresult-item__button"
rel="nofollow" title="Details">
<f:link.action action="detail" controller="Product" extensionName="epproducts" pluginName="product_detail"
arguments="{product: item.product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: referrer}"
pageUid="{item.product.detailPage}" absolute="1"
rel="nofollow" title="Details &amp; Buchen"
class="button w-full">
Details{f:if(condition: item.hideBookingButton, else: ' &amp; Buchen')}
</a>
</f:link.action>
</div>
</div>
<button class="teaserbox-watchlist" x-data="watchlistToggle('{item.key}')" x-bind="trigger">
@@ -10,6 +10,9 @@
</div>
</f:then>
<f:else>
<f:if condition="{referringPageUri}">
<f:variable name="referrer" value="{referringPageUri}"/>
</f:if>
<f:for each="{watchlist}" as="section">
<div id="concept-{section.concept.uid}">
<h2 class="headline headline--secondary headline--underlined">
@@ -20,7 +23,11 @@
<div class="teaserbox teaserbox--landscape teaserbox--searchresult searchresult-item">
<div class="teaserbox__image">
<img src="{item.country.flag}" class="teaserbox__flag" alt="{item.country.name}"/>
<a href="{item.detailPageUri}" rel="nofollow" title="Details &amp; Buchen">
<f:link.action action="detail" controller="Product" extensionName="epproducts" pluginName="product_detail"
arguments="{product: item.product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: referrer}"
pageUid="{item.product.detailPage}" absolute="1"
rel="nofollow" title="Details &amp; Buchen">
<picture class="searchresult-item__image">
<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"/>
@@ -29,7 +36,7 @@
title="{item.hotel.images.resized.s.0.title}"
alt="{item.hotel.images.resized.s.0.alt}">
</picture>
</a>
</f:link.action>
<div class="concept-badge concept-badge--{section.concept.code}"
id="{section.concept.code}">
{section.concept.name}
@@ -95,11 +102,15 @@
<f:if condition="{item.dates -> f:count()} > 0">
<f:if condition="{item.daytrip}">
<f:else>
<a href="{item.detailPageUri}{f:if(condition: referringPageUri, then: '?ref={referringPageUri -> f:format.urlencode()}')}" rel="nofollow" title="Details &amp; Buchen">
<f:link.action action="detail" controller="Product" extensionName="epproducts" pluginName="product_detail"
arguments="{product: item.product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: referrer}"
pageUid="{item.product.detailPage}" absolute="1"
rel="nofollow" title="Details &amp; Buchen">
<span class="searchresult-item__daterange">
<i class="fa fa-arrow-circle-right"></i> {item.dates -> f:count()} {f:if(condition: '{item.dates -> f:count()} > 1', then: 'Termine', else: 'Termin')}
</span>
</a>
</f:link.action>
</f:else>
</f:if>
</f:if>
@@ -110,10 +121,14 @@
</div>
<div class="teaserbox__aside__bottom">
<span class="searchresult-item__price">ab {item.minPrice} €</span>
<a href="{item.detailPageUri}{f:if(condition: referringPageUri, then: '?ref={referringPageUri -> f:format.urlencode()}')}" class="button button--full searchresult-item__button"
rel="nofollow" title="Details">
<f:link.action action="detail" controller="Product" extensionName="epproducts" pluginName="product_detail"
arguments="{product: item.product.uid, hotel: item.hotel.uid}"
additionalParams="{ref: referrer}"
pageUid="{item.product.detailPage}" absolute="1"
rel="nofollow" title="Details &amp; Buchen"
class="button w-full">
Details{f:if(condition: item.hideBookingButton, else: ' &amp; Buchen')}
</a>
</f:link.action>
</div>
</div>
<a href="#" class="teaserbox-watchlist" x-data="watchlistToggle('{item.key}')" x-bind="trigger">