getProperty hat nur DefaultValue nach Signal & Creation Dialog

Moin,

ich bastel gerade ein Grid-Element, bei dem im creationDialog vorher die Anzahl der Columns festgelegt werden kann.

Mittels Signals wollte ich nun das Grid-Element mit der richtigen Anzahl an Columns gleich befüllen. Das klappt auch ganz gut, doch es gibt ein Problem. Im Signal-Handler wird NodeInterface $node übergeben, in welchem ich eigentlich im Property die angegebene Column-Anzahl aus dem Creation Dialog erwarte. Jedoch

(int)$node->getProperty("columns")

ergibt immer 2, was dem DefaultValue entspricht. Dabei ist es egal, ob ich im CreationDialog 2, 3 oder 100 eingebe. Im Property-View der Node ist dann aber der richtige Wert vorhanden.

Das einzige, was ich mir vorstellen könnte, ist: Ich habe das CreationDialog noch nicht ganz verstanden.

Meine konkrete Frage dazu ist: Wie komme ich an den Wert aus dem CreationDialog? Muss ich einen CreationDialogHandler programmieren und das property selbst füttern?

Yaml:

'Templado.Tailwind:CustomGrid':
  superTypes:
    'Neos.Neos:Content': true
  ui:
    icon: icon-table
    label: 'Grid (Variabel)'
    group: grid
    inspector:
      groups:
        properties:
          label: "Einstellungen"
          icon: icon-cogs
  properties:
    columns:
      type: string
      defaultValue: 2
      ui:
        showInCreationDialog: true
        reloadIfChanged: true
        label: 'Spalten'
        inspector:
          group: "properties"

Package.php Signal Registrierung: (getestet mit nodeAdded und afterNodeCreate)

$dispatcher = $bootstrap->getSignalSlotDispatcher();
$dispatcher->connect(Node::class, 'nodeAdded', CreateDefaultContent::class, 'handleAfterNodeCreateSignal');

Moin Dennis,

es gibt ein spezielles NodeCreationHandlersApplied Signal in der AbstractCreate Klasse des Neos UI:

Dem Signal wird der Node nach Anwendung aller NodeCreationHandler übergeben. Das Signal nodeAdded wird bereits davor getriggert.

Vermutlich wird es klappen, wenn Du einfach auf das andere Signal reagierst, also:

$dispatcher = $bootstrap->getSignalSlotDispatcher();
$dispatcher->connect(AbstractCreate::class, 'nodeCreationHandlersApplied', CreateDefaultContent::class, 'handleAfterNodeCreateSignal');
2 Likes

Das klappt 10/10, vielen Dank für die Hilfe!

Just for reference and others searching.

There is also the Flowpack.NodeTemplate package? This allows to configure the nodes that are created and can use the values of the Node creation dialog. Internally it uses the same mechanisms wilhelm already mentioned.

The loop syntax is a bit weird and would require some eel magic.

items = ${Array.range(1, data.colNumber)}

Regards, Martin

1 Like