Hallo zusammen,
ich arbeite mich gerade durch Contao 3.2.3, aktuell rund um das Thema 'DCA' und habe folgendes Problem, bei dem ich einfach nicht mehr weiterkomme:
Bei Nutzen von input_field_callback wird die save_callback-Funktion nicht aufgerufen.
Hierbei scheint es unerheblich, wo save_callback definiert wird, ob im DCA direkt oder in der aufgerufenen CreateField1-Funktion.
Hintergrund ist der Versuch, ein readonly/disabled Feld anzulegen, dem ein berechneter Wert zugewiesen wird, der auch abgespeichert werden soll.
Vielen Dank für eure Hilfe!
PHP-Code:
// DCA ...
(
'label' => &$GLOBALS['TL_LANG']['tl_table1']['field1'],
'exclude' => true,
'inputType' => 'text',
'eval' => array('alwaysSave'=>true),
'sql' => "int(10) unsigned NOT NULL default '0'",
'input_field_callback' => array('tl_table1', 'createField1'),
'save_callback' => array(array('tl_table1', 'saveField1')),
);
class tl_table1 extends Backend
{
// Callback invoked by input_field_callback
public function createField1($objDC, $strLabel)
{
$arrData = $GLOBALS['TL_DCA']['tl_table1']['fields'][$objDC->field];
$strClass = $GLOBALS['BE_FFL'][$arrData['inputType']];
// $arrData['eval']['disabled'] = true;
// $arrData['eval']['mandatory'] = true;
$arrData['eval']['alwaysSave'] = true;
// $arrData['eval']['required'] = true;
$arrData['save_callback'] = array(array('tl_table1', 'saveField1'));
// Create Widget
$objWidget = new $strClass(Widget::getAttributesFromDca($arrData, $objDC->inputName, 0, $objDC->field, $objDC->table));
return '<div' . ($arrData['eval']['tl_class'] ? ' class="' . $arrData['eval']['tl_class'] . '"' : '') . '>' . $objWidget->parse() . (($GLOBALS['TL_CONFIG']['oldBeTheme'] || !$objWidget->hasErrors()) ? "Bla ..." : '') . '</div>';
}
// Callback invoked by save_callback
public function saveField1($varValue, $objDC)
{
$intCalcValue = 100;
$this->Input->setPost('field1', $intCalcValue);
return $intCalcValue;
}
}