diff --git a/Classes/ViewHelpers/Mark/ContentAreaViewHelper.php b/Classes/ViewHelpers/Mark/ContentAreaViewHelper.php index 73ddb91..4d11b4c 100644 --- a/Classes/ViewHelpers/Mark/ContentAreaViewHelper.php +++ b/Classes/ViewHelpers/Mark/ContentAreaViewHelper.php @@ -4,13 +4,14 @@ namespace TYPO3\CMS\VisualEditor\ViewHelpers\Mark; -use Exception; use B13\Container\Tca\Registry; +use Exception; use InvalidArgumentException; use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\EventDispatcher\EventDispatcher; use TYPO3\CMS\Core\Information\Typo3Version; +use TYPO3\CMS\Core\Page\ContentAreaClosure; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Frontend\Page\PageInformation; use TYPO3\CMS\VisualEditor\BackwardsCompatibility\ContentArea; @@ -64,6 +65,11 @@ public function render(): string $renderingContext = $this->renderingContext ?? throw new InvalidArgumentException('$this->renderingContext is not available', 1772464212); $request = $renderingContext->getAttribute(ServerRequestInterface::class); + $renderedContentArea = $this->renderChildren(); + if (!$this->editModeService->isEditMode($request)) { + return $renderedContentArea; + } + $this->editModeService->init($request); $additionalArguments = $this->arguments; @@ -74,7 +80,7 @@ public function render(): string $event = $this->eventDispatcher->dispatch( new RenderContentAreaEvent( - renderedContentArea: $this->renderChildren(), + renderedContentArea: $renderedContentArea, contentArea: $this->getContentArea($request, $colPos, $txContainerParent), request: $request, ), @@ -109,8 +115,15 @@ private function getContentArea(ServerRequestInterface $request, int $colPos, in /** @var PageInformation $pageInformation */ $pageInformation = $request->getAttribute('frontend.page.information'); $pageLayout = $pageInformation->getPageLayout() ?? throw new InvalidArgumentException('PageLayout is not available', 1772464283); - foreach ($pageLayout->getContentAreas() as $contentArea) { + $contentAreaCollection = $pageLayout->getContentAreas(); + if ($this->typo3Version->getMajorVersion() >= 14) { + $contentAreaCollection = $contentAreaCollection->withRequest($request); + } + + foreach ($contentAreaCollection as $contentArea) { if ($this->typo3Version->getMajorVersion() >= 14) { + $contentArea = $contentArea instanceof ContentAreaClosure ? $contentArea->instantiate($request) : $contentArea; + $contentAreaColPos = $contentArea->getColPos(); $name = $contentArea->getName(); /** @var list $allowed */ diff --git a/phpstan-baseline-13.neon b/phpstan-baseline-13.neon index f0c3ee5..d4a87a1 100644 --- a/phpstan-baseline-13.neon +++ b/phpstan-baseline-13.neon @@ -144,6 +144,24 @@ parameters: count: 1 path: Classes/ViewHelpers/ImageViewHelper.php + - + message: '#^Call to method instantiate\(\) on an unknown class TYPO3\\CMS\\Core\\Page\\ContentAreaClosure\.$#' + identifier: class.notFound + count: 1 + path: Classes/ViewHelpers/Mark/ContentAreaViewHelper.php + + - + message: '#^Cannot call method withRequest\(\) on array\.$#' + identifier: method.nonObject + count: 1 + path: Classes/ViewHelpers/Mark/ContentAreaViewHelper.php + + - + message: '#^Class TYPO3\\CMS\\Core\\Page\\ContentAreaClosure not found\.$#' + identifier: class.notFound + count: 1 + path: Classes/ViewHelpers/Mark/ContentAreaViewHelper.php + - message: '#^Property TYPO3Fluid\\Fluid\\Core\\ViewHelper\\AbstractViewHelper\:\:\$renderingContext \(TYPO3Fluid\\Fluid\\Core\\Rendering\\RenderingContextInterface\) on left side of \?\? is not nullable\.$#' identifier: nullCoalesce.property diff --git a/phpstan-baseline-14.neon b/phpstan-baseline-14.neon index f60ad0b..52bbf92 100644 --- a/phpstan-baseline-14.neon +++ b/phpstan-baseline-14.neon @@ -54,6 +54,12 @@ parameters: count: 1 path: Classes/ViewHelpers/Mark/ContentAreaViewHelper.php + - + message: '#^Instanceof between TYPO3\\CMS\\Core\\Page\\ContentArea and TYPO3\\CMS\\Core\\Page\\ContentAreaClosure will always evaluate to false\.$#' + identifier: instanceof.alwaysFalse + count: 1 + path: Classes/ViewHelpers/Mark/ContentAreaViewHelper.php + - message: '#^Property TYPO3\\CMS\\VisualEditor\\ViewHelpers\\Render\\TextViewHelper\:\:\$typo3Version on left side of \?\? is not nullable nor uninitialized\.$#' identifier: nullCoalesce.initializedProperty