Skip to content

Commit d0919f4

Browse files
committed
[TASK] park current GridColumnItem in runtime cache
to not break the BeforeContainerPreviewIsRenderedEvent Method Signatures we put the GridColumnItem into the runtime cache in the ContainerPreviewRenderer renderPageModulePreviewHeader Method (which is always called) and fetch it in the GridRenderer to pass it tho the Event. This is a hack to not break the event, but fix the custom BackendTemplate usage (s. dfc61c4) Relates to: #563
1 parent c45f383 commit d0919f4

File tree

5 files changed

+34
-8
lines changed

5 files changed

+34
-8
lines changed

Classes/Backend/Preview/ContainerPreviewRenderer.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,33 @@
1515

1616
use TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer;
1717
use TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumnItem;
18+
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
19+
use TYPO3\CMS\Core\Information\Typo3Version;
20+
use TYPO3\CMS\Core\Utility\GeneralUtility;
1821

1922
class ContainerPreviewRenderer extends StandardContentPreviewRenderer
2023
{
2124
protected GridRenderer $gridRenderer;
25+
protected FrontendInterface $runtimeCache;
2226

23-
public function __construct(GridRenderer $gridRenderer) {
27+
public function __construct(GridRenderer $gridRenderer, FrontendInterface $runtimeCache) {
2428
$this->gridRenderer = $gridRenderer;
29+
$this->runtimeCache = $runtimeCache;
30+
}
31+
32+
public function renderPageModulePreviewHeader(GridColumnItem $item): string
33+
{
34+
$this->runtimeCache->set('tx_container_current_gridColumItem', $item);
35+
return parent::renderPageModulePreviewHeader($item);
2536
}
2637

2738
public function renderPageModulePreviewContent(GridColumnItem $item): string
2839
{
40+
if ((GeneralUtility::makeInstance(Typo3Version::class))->getMajorVersion() > 11) {
41+
return parent::renderPageModulePreviewContent($item);
42+
}
2943
$record = $item->getRecord();
30-
$record['tx_container_grid'] = $this->gridRenderer->renderGrid($record, $item->getContext(), $item);
44+
$record['tx_container_grid'] = $this->gridRenderer->renderGrid($record, $item->getContext());
3145
$item->setRecord($record);
3246
return parent::renderPageModulePreviewContent($item);
3347
}

Classes/Backend/Preview/GridRenderer.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use TYPO3\CMS\Backend\View\BackendLayout\Grid\GridRow;
2727
use TYPO3\CMS\Backend\View\PageLayoutContext;
2828
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
29+
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
2930
use TYPO3\CMS\Core\Localization\LanguageService;
3031
use TYPO3\CMS\Core\Utility\GeneralUtility;
3132
use TYPO3\CMS\Fluid\View\StandaloneView;
@@ -37,20 +38,23 @@ class GridRenderer
3738
protected ContainerFactory $containerFactory;
3839
protected NewContentUrlBuilder $newContentUrlBuilder;
3940
protected EventDispatcherInterface $eventDispatcher;
41+
protected FrontendInterface $runtimeCache;
4042

4143
public function __construct(
4244
Registry $tcaRegistry,
4345
ContainerFactory $containerFactory,
4446
NewContentUrlBuilder $newContentUrlBuilder,
45-
EventDispatcherInterface $eventDispatcher
47+
EventDispatcherInterface $eventDispatcher,
48+
FrontendInterface $runtimeCache
4649
) {
4750
$this->eventDispatcher = $eventDispatcher;
4851
$this->tcaRegistry = $tcaRegistry;
4952
$this->containerFactory = $containerFactory;
5053
$this->newContentUrlBuilder = $newContentUrlBuilder;
54+
$this->runtimeCache = $runtimeCache;
5155
}
5256

53-
public function renderGrid(array $record, PageLayoutContext $context, ?GridColumnItem $parentGridColumnItem = null): string
57+
public function renderGrid(array $record, PageLayoutContext $context): string
5458
{
5559
$grid = GeneralUtility::makeInstance(Grid::class, $context);
5660
try {
@@ -96,6 +100,7 @@ public function renderGrid(array $record, PageLayoutContext $context, ?GridColum
96100
$view->assign('grid', $grid);
97101
$view->assign('containerRecord', $record);
98102
$view->assign('context', $context);
103+
$parentGridColumnItem = $this->runtimeCache->get('tx_container_current_gridColumItem');
99104
$beforeContainerPreviewIsRendered = new BeforeContainerPreviewIsRenderedEvent($container, $view, $grid, $parentGridColumnItem);
100105
$this->eventDispatcher->dispatch($beforeContainerPreviewIsRendered);
101106
$rendered = $view->render();

Classes/Events/BeforeContainerPreviewIsRenderedEvent.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ final class BeforeContainerPreviewIsRenderedEvent
2525

2626
protected Grid $grid;
2727

28-
protected ?GridColumnItem $item;
28+
protected GridColumnItem $item;
2929

30-
public function __construct(Container $container, StandaloneView $view, Grid $grid, ?GridColumnItem $item)
30+
public function __construct(Container $container, StandaloneView $view, Grid $grid, GridColumnItem $item)
3131
{
3232
$this->container = $container;
3333
$this->view = $view;
@@ -50,8 +50,9 @@ public function getGrid(): Grid
5050
return $this->grid;
5151
}
5252

53-
public function getItem(): ?GridColumnItem
53+
public function getItem(): GridColumnItem
5454
{
55+
trigger_error('gridColumItem property will be removed on next major release', E_USER_DEPRECATED);
5556
return $this->item;
5657
}
5758
}

Classes/Tca/Registry.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ public function configureContainer(ContainerConfiguration $containerConfiguratio
6464
$containerConfiguration->getGroup(),
6565
]
6666
);
67-
$GLOBALS['TCA']['tt_content']['types'][$containerConfiguration->getCType()]['previewRenderer'] = \B13\Container\Backend\Preview\ContainerPreviewRenderer::class;
6867
}
68+
$GLOBALS['TCA']['tt_content']['types'][$containerConfiguration->getCType()]['previewRenderer'] = \B13\Container\Backend\Preview\ContainerPreviewRenderer::class;
69+
6970

7071
if ((GeneralUtility::makeInstance(Typo3Version::class))->getMajorVersion() >= 13) {
7172
if (!isset($GLOBALS['TCA']['tt_content']['types'][$containerConfiguration->getCType()]['creationOptions'])) {

Configuration/Services.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@ services:
1515

1616
B13\Container\Tca\Registry:
1717
public: true
18+
B13\Container\Backend\Preview\GridRenderer:
19+
arguments:
20+
$runtimeCache: '@cache.runtime'
1821
B13\Container\Backend\Preview\ContainerPreviewRenderer:
1922
public: true
23+
arguments:
24+
$runtimeCache: '@cache.runtime'
2025
B13\Container\Hooks\UsedRecords:
2126
public: true
2227
B13\Container\Hooks\Datahandler\CommandMapAfterFinishHook:

0 commit comments

Comments
 (0)