diff --git a/Classes/Fluid/ViewHelper/ComponentRenderer.php b/Classes/Fluid/ViewHelper/ComponentRenderer.php
index cec7023..891996c 100644
--- a/Classes/Fluid/ViewHelper/ComponentRenderer.php
+++ b/Classes/Fluid/ViewHelper/ComponentRenderer.php
@@ -551,7 +551,7 @@ protected function initializeComponentParams()
protected function extractContentViewHelpers(NodeInterface $node, RenderingContext $renderingContext): array
{
return array_reduce(
- $this->extractViewHelpers($node, ContentViewHelper::class),
+ $this->extractViewHelpers($node, ContentViewHelper::class, false),
function (array $nodes, ViewHelperNode $node) use ($renderingContext) {
$slotArgument = $node->getArguments()['slot'] ?? null;
$slotName = ($slotArgument) ? $slotArgument->evaluate($renderingContext) : self::DEFAULT_SLOT;
@@ -569,7 +569,7 @@ function (array $nodes, ViewHelperNode $node) use ($renderingContext) {
* @param string $viewHelperClassName
* @return array
*/
- protected function extractViewHelpers(NodeInterface $node, string $viewHelperClassName): array
+ protected function extractViewHelpers(NodeInterface $node, string $viewHelperClassName, bool $recursive = true): array
{
$viewHelperNodes = [];
@@ -581,9 +581,12 @@ protected function extractViewHelpers(NodeInterface $node, string $viewHelperCla
$viewHelperNodes[] = $node;
} else {
foreach ($node->getChildNodes() as $childNode) {
+ if ($recursive === false && $childNode instanceof ViewHelperNode && ($childNode->getViewHelperClassName() === ComponentViewHelper::class || $childNode->getUninitializedViewHelper() instanceof ComponentRenderer)) {
+ continue;
+ }
$viewHelperNodes = array_merge(
$viewHelperNodes,
- $this->extractViewHelpers($childNode, $viewHelperClassName)
+ $this->extractViewHelpers($childNode, $viewHelperClassName, $recursive)
);
}
}
diff --git a/Tests/Functional/SlotParameterTest.php b/Tests/Functional/SlotParameterTest.php
index d02c6c4..2317f39 100644
--- a/Tests/Functional/SlotParameterTest.php
+++ b/Tests/Functional/SlotParameterTest.php
@@ -64,6 +64,14 @@ public function renderDataProvider(): \Generator
'some htmlother html',
"some html\nother html\n"
];
+ yield 'two nested component calls with named slots' => [
+ 'some htmlother html',
+ "some htmlother html\n"
+ ];
+ yield 'two different nested component calls with named slots' => [
+ 'some htmlslot 1 htmlslot 2 htmlslot content',
+ "some htmlslot 1 html|slot 2 html|slot content\n"
+ ];
// Check if slot object behaves correct for if statements
yield 'unspecified slot parameter' => [