Enable limiting of dates on detail pages according to teasers

This commit is contained in:
Björn Fromme
2020-02-15 17:26:08 +01:00
parent a130eca733
commit f58d503529
13 changed files with 109 additions and 75 deletions
@@ -27,6 +27,7 @@ namespace EP\EpTheme\ViewHelpers\Uri;
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use EP\EpEvents\Domain\Model\Hotel;
use EP\EpProducts\Domain\Model\Product;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
@@ -42,12 +43,12 @@ class ProductViewHelper extends AbstractViewHelper
{
parent::initializeArguments();
$this->registerArgument('product', Product::class, 'The product', true);
$this->registerArgument('hotel', 'mixed', 'The hotel');
$this->registerArgument('linkHotel', 'bool', 'Whether to link the hotel', false, false);
$this->registerArgument('referringPageUid', 'int', 'Uid of the referring page');
$this->registerArgument('defaultDetailPageUid', 'int', 'Uid of default page for product details');
$this->registerArgument('origin', 'string', 'Origin of the link');
$this->registerArgument('product', 'array', 'The product');
$this->registerArgument('hotel', 'array', 'The hotel');
$this->registerArgument('dateFrom', 'string', 'Date to limit table on detail page by (Y-m-d)');
$this->registerArgument('dateTo', 'string', 'Date to limit table on detail page by (Y-m-d)');
$this->registerArgument('forceHotelUid', 'bool', 'Whether to force link a hotel');
$this->registerArgument('slug', 'string', 'Slug to append to resulting uri');
}
/**
@@ -63,35 +64,45 @@ class ProductViewHelper extends AbstractViewHelper
)
{
$product = $arguments['product'];
$hotel = $arguments['hotel'];
if ($product->getDetailPage()) {
$linkArguments = null;
if ($arguments['forceHotelUid']) {
$linkArguments = [
'product' => $product['uid'],
'hotel' => $hotel['uid'],
];
} elseif ($arguments['dateFrom'] || $arguments['dateTo']) {
$linkArguments = [
'dateFrom' => $arguments['dateFrom'],
'dateTo' => $arguments['dateTo'],
];
}
if (null !== $linkArguments) {
$uri = $renderingContext
->getControllerContext()
->getUriBuilder()
->reset()
->setTargetPageUid($product['detailPage'])
->uriFor('detail', $linkArguments, 'Product', 'epproducts', 'product_detail')
;
} else {
/** @var ContentObjectRenderer $contentObject */
$contentObject = GeneralUtility::makeInstance(ContentObjectRenderer::class);
return $contentObject->typoLink_URL(
$uri = $contentObject->typoLink_URL(
[
'parameter' => $product->getDetailPage(),
'parameter' => $product['detailPage'],
]
);
}
$pageUid = $arguments['defaultDetailPageUid'];
$uriArguments = [ 'product' => $product ];
if ((int) $arguments['referringPageUid'] > 0) {
$uriArguments['referringPageUid'] = $arguments['referringPageUid'];
if ($arguments['slug']) {
$uri .= $arguments['slug'].'/';
}
if ($arguments['origin'] !== null) {
$uriArguments['origin'] = $arguments['origin'];
}
if ((bool) $arguments['linkHotel'] && $arguments['hotel'] !== null) {
$uriArguments['hotel'] = $arguments['hotel'];
}
return $renderingContext
->getControllerContext()
->getUriBuilder()
->reset()
->setTargetPageUid($pageUid)
->uriFor('detail', $uriArguments, 'Product', 'epproducts', 'product_detail')
;
return $uri;
}
}