Adopt product teasers on city detail page

This commit is contained in:
Björn Fromme
2021-11-02 17:27:54 +01:00
parent 782df3bad3
commit c1da7dde8b
3 changed files with 69 additions and 7 deletions
@@ -29,22 +29,30 @@ namespace EP\EpProducts\Controller;
use EP\EpProducts\Domain\Model\City; use EP\EpProducts\Domain\Model\City;
use EP\EpProducts\Domain\Repository\CityRepository; use EP\EpProducts\Domain\Repository\CityRepository;
use EP\EpProducts\Service\ProductDataService;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
class CityController extends ActionController class CityController extends ActionController
{ {
/** /**
* @var \EP\EpProducts\Domain\Repository\CityRepository * @var CityRepository
*/ */
protected $cityRepository; protected $cityRepository;
/** /**
* @param CityRepository $cityRepository * @var ProductDataService
*/ */
public function __construct(CityRepository $cityRepository) private $productDataService;
/**
* @param CityRepository $cityRepository
* @param ProductDataService $productDataService
*/
public function __construct(CityRepository $cityRepository, ProductDataService $productDataService)
{ {
$this->cityRepository = $cityRepository; $this->cityRepository = $cityRepository;
$this->productDataService = $productDataService;
} }
/** /**
@@ -52,12 +60,25 @@ class CityController extends ActionController
*/ */
public function detailAction(City $city = null) public function detailAction(City $city = null)
{ {
if ($city === null) { if (null === $city) {
$cityUid = $this->settings['cityUid']; $cityUid = $this->settings['cityUid'];
$city = $this->cityRepository->findByIdentifier($cityUid); $city = $this->cityRepository->findByIdentifier($cityUid);
} }
$this->view->assign('city', $city); $teasers = [];
if (null !== $city) {
$filterSettings = [
'cityUids' => [$cityUid]
];
$teasers = $this->productDataService->getTeasergroup($filterSettings);
}
$this->view->assignMultiple([
'city' => $city,
'teasers' => $teasers,
'filterSettings' => $filterSettings,
]);
} }
public function teasergroupAction() public function teasergroupAction()
@@ -24,6 +24,15 @@
</config> </config>
</TCEforms> </TCEforms>
</settings.cityUid> </settings.cityUid>
<settings.showMoreLink>
<TCEforms>
<exclude>0</exclude>
<label>Link zum Suchergebnis anzeigen:</label>
<config>
<type>check</type>
</config>
</TCEforms>
</settings.showMoreLink>
</el> </el>
</ROOT> </ROOT>
</sDEF> </sDEF>
@@ -10,7 +10,7 @@
<f:render partial="SubpageHeader" arguments="{images: city.headerImages, topline: city.headerSubtitle, headline: city.headerTitle, settings: settings}"/> <f:render partial="SubpageHeader" arguments="{images: city.headerImages, topline: city.headerSubtitle, headline: city.headerTitle, settings: settings}"/>
<f:cObject typoscriptObjectPath="lib.breadcrumb"/> <f:cObject typoscriptObjectPath="lib.breadcrumb"/>
<div class="container"> <div class="container">
<f:if condition="{v:content.get(column: 1) -> f:count()} > 0"> <f:if condition="{teasers}">
<div class="mb-8 lg:hidden"> <div class="mb-8 lg:hidden">
<button type="button" <button type="button"
class="button w-full mb-8" class="button w-full mb-8"
@@ -25,9 +25,41 @@
<div class="grid grid-cols-3 gap-8"> <div class="grid grid-cols-3 gap-8">
<div class="col-span-3 lg:col-span-2"> <div class="col-span-3 lg:col-span-2">
<f:render partial="City/Details" arguments="{city: city}"/> <f:render partial="City/Details" arguments="{city: city}"/>
<f:if condition="{teasers}">
<div class="flex flex-col space-y-4 md:space-y-8">
<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,
landscape: 1,
index: iteration.index
}"/>
</f:for>
</div>
<f:if condition="{settings.showMoreLink}">
<f:link.action pageUid="{settings.defaultStaticSearchPageUid}" class="button my-8"
action="staticresult" controller="Search"
arguments="{encodedFilterSettings: '{filterSettings -> ep:filterSettingsEncoder()}'}"
additionalAttributes="{rel: 'nofollow'}">
Alle anzeigen
</f:link.action>
</f:if>
</f:if>
</div> </div>
<div class="col-span-3 lg:col-span-1"> <div class="col-span-3 lg:col-span-1">
<f:if condition="{v:content.get(column: 1) -> f:count()} > 0"> <f:if condition="{teasers}">
<p class="hidden lg:block"> <p class="hidden lg:block">
<button type="button" <button type="button"
class="button w-full mb-8" class="button w-full mb-8"