With NodeTemplates version 1.2 I've created the possibility to create template sites where you can add content elements to have a fast quick start (e.g. for blog posts).
For this, I've created following mixin
'Base.Templates:Mixin.CreationDialog':
ui:
creationDialog:
elements:
templateNodeIdentifier:
type: reference
ui:
label: Template
editorOptions:
nodeTypes: ['Base.Templates:Mixin.Template']
options:
template:
childNodes:
mainContentCollection:
when: '${data.templateNodeIdentifier}'
name: main
options:
childNodesToCopy: "${q(node).find('#' + data.templateNodeIdentifier).children('main').children().get()}"
And following Package.php
<?php
namespace Base\Templates;
use Base\Templates\Service\ChildNodeCopyService;
use Flowpack\NodeTemplates\Template;
use Neos\Flow\Core\Bootstrap;
use Neos\Flow\Package\Package as BasePackage;
/**
* The Node Templates Magic Package
*/
class Package extends BasePackage
{
/**
* @param Bootstrap $bootstrap The current bootstrap
* @return void
*/
public function boot(Bootstrap $bootstrap)
{
$dispatcher = $bootstrap->getSignalSlotDispatcher();
$dispatcher->connect(
Template::class,
"nodeTemplateApplied",
ChildNodeCopyService::class,
"copyChildNodesAfterTemplateApplication"
);
}
}
The ChildNodeCopyService.php looks like that
<?php
namespace Base\Templates\Service;
use Flowpack\NodeTemplates\Service\EelEvaluationService;
use Neos\ContentRepository\Domain\Model\NodeInterface;
use Neos\Eel\Package as EelPackage;
use Neos\Flow\Annotations as Flow;
use Neos\Neos\Service\NodeOperations;
/**
*/
class ChildNodeCopyService
{
/**
* @var EelEvaluationService
* @Flow\Inject
*/
protected $eelEvaluationService;
/**
* @var NodeOperations
* @Flow\Inject
*/
protected $nodeOperations;
/**
* @param NodeInterface $node
* @param array $context
* @param array $options
* @return void
*/
public function copyChildNodesAfterTemplateApplication(
NodeInterface $node,
array $context,
array $options
): void {
// Copy child nodes from template
if (
isset($options["childNodesToCopy"]) &&
preg_match(
EelPackage::EelExpressionRecognizer,
$options["childNodesToCopy"]
)
) {
$childNodes = $this->eelEvaluationService->evaluateEelExpression(
$options["childNodesToCopy"],
$context
);
/** @var NodeInterface $childNode */
foreach ($childNodes as $childNode) {
$this->nodeOperations->copy($childNode, $node, "into");
}
}
}
}
With the new version, it is not possible to create this helpful feature. Should we create an API for that, to make this possible?
With NodeTemplates version 1.2 I've created the possibility to create template sites where you can add content elements to have a fast quick start (e.g. for blog posts).
For this, I've created following mixin
And following
Package.phpThe
ChildNodeCopyService.phplooks like thatWith the new version, it is not possible to create this helpful feature. Should we create an API for that, to make this possible?