OK, ich habe mich jetzt ein paar Stunden damit herumgeschlagen und so wie du es hinbekommen hast, dass die Field Callbacks gehen, ist mir etwas rätselhaft, denn die werden alle sauber in der efg_internal_dca_formdata.html5 überschrieben
Daher habe ich dieses Template zur DCA-Erstellung etwas abgewandelt, sodass man nun auch globale und Feld-Callbacks registrieren kann Leider kann man dafür die normalen 'fields'- und 'config'-Arrays nicht nehmen, da in der generierten DCA-Datei (fd_...) das ganze globale Array $GLOBALS['TL_DCA']['tl_formdata'] überschrieben werden muss. Dieses Array ist aber vor dem Überschreiben nicht leer, sondern mit allerlei anderen Werten gefüllt. Wenn ich nun die Callbacks einfach mit $GLOBALS['TL_DCA']['tl_formdata']['fields']... setzen würde, könnte ich im Template nicht mehr unterscheiden, was vom Programmierer und was vom Framework kommt. Daher die eigene Struktur.
Hier die Änderungen an efg_internal_dca_formdata.html5:
Code:
...
/**
* Table tl_formdata defined by form "<?php echo $this->arrForm['title']; ?>"
*/
// store global callbacks
$globalCallbacks = $GLOBALS['TL_DCA']['tl_formdata']['globalcallbacks'];
// store field callbacks
$fieldCallbacks = $GLOBALS['TL_DCA']['tl_formdata']['fieldcallbacks'];
$GLOBALS['TL_DCA']['tl_formdata'] = array
(
// Config
'config' => array
...
<?php if ($this->arrForm['key'] != 'feedback'): ?>
'formFilterKey' => 'form',
'formFilterValue' => '<?php echo $this->arrForm['title']; ?>'
<?php endif; ?>
)
);
// get global callbacks
if ($globalCallbacks)
$GLOBALS['TL_DCA']['tl_formdata']['config'] = array_merge($GLOBALS['TL_DCA']['tl_formdata']['config'], $globalCallbacks);
// get field callbacks
if ($fieldCallbacks)
$GLOBALS['TL_DCA']['tl_formdata']['fields'] = array_merge($GLOBALS['TL_DCA']['tl_formdata']['fields'], $fieldCallbacks);
// Detail fields in table tl_formdata_details
<?php foreach ($this->arrFields as $varKey => $varVals): ?>
...
Dann in einer eigenen tl_formdata.php:
Code:
$GLOBALS['TL_DCA']['tl_formdata']['fieldcallbacks']['companion']['save_callback'] = array
(
array('myClass', 'myFunction1')
);
$GLOBALS['TL_DCA']['tl_formdata']['globalcallbacks']['onsubmit_callback'] = array
(
array('myClass', 'myFunction2')
);
Lesezeichen