Ziel ist es von einem (neuen) Mitglied eine Zusage für die Nutzung seiner Beiträge in einer gedruckten Vereinszeitschrift zu erhalten und den Zeitpunkt der Zusage festzuhalten.
Ich habe in der tl_member eine Checkbox sowie ein Feld für einen dazugehörigen Zeitstempel erstellt.
Über einen OnSubmit Callback ist es gelungen im BE das Datum beim Anklicken der Checkbox durchzuführen.
Im Frontend geschieht leider nichts. Da es wohl den Datacontainer im FE nicht gibt müßte ich wohl eine Prüfung einbauen.
Hier habe ich leider keine Idee wie das anzustellen ist bzw. an welcher Stelle die Doku dazu Auskunft gibt.
Ist der OnSubmit Callback überhaupt zielführend? Besser wäre ja eine Prüfung auf die Checkbox, ob diese neu gesetzt worden ist.
Anbei einmal die DCA Definition sowie der Callback.
PHP-Code:
<?php
// contao/dca/tl_member.php
use Contao\CoreBundle\DataContainer\PaletteManipulator;
/**
* Add fields to tl_member
*/
$GLOBALS['TL_DCA']['tl_member']['fields']['myCheckbox'] = [
'label' => &$GLOBALS['TL_LANG']['tl_member']['myCheckbox'],
'exclude' => true,
'search' => true,
'inputType' => 'checkbox',
'eval' => ['tl_class' => 'w50', 'maxlength' => 255, 'feEditable' => true,'feViewable' => true, 'submitOnChange'=>true],
'sql' => ['type' => 'string', 'length' => 1, 'fixed' => true, 'default' => ''],
];
$GLOBALS['TL_DCA']['tl_member']['fields']['myDate'] = [
'label' => &$GLOBALS['TL_LANG']['tl_member']['myDate'],
'exclude' => true,
'search' => true,
'sorting' => true,
'flag' => 6,
'inputType' => 'text',
'eval' => ['tl_class' => 'w50', 'maxlength' => 10, 'feEditable' => true,'feViewable' => true, 'rgxp'=>'date', 'datepicker'=>true],
'sql' => ['type' => 'integer', 'notnull' => false, 'unsigned' => true],
];
/**
* Extend the tl_member palettes
*/
PaletteManipulator::create()
->addLegend('my_legend', 'groups_legend' , PaletteManipulator::POSITION_BEFORE)
->addField('myCheckbox', 'my_legend', PaletteManipulator::POSITION_APPEND)
->addField('myDate', 'my_legend', PaletteManipulator::POSITION_APPEND)
->applyToPalette('default', 'tl_member')
;
PHP-Code:
<?php
// src/EventListener/DataContainer/myDateOnsubmitCallbackListener.php
namespace App\EventListener\DataContainer;
use Contao\CoreBundle\ServiceAnnotation\Callback;
use Doctrine\DBAL\Connection;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Contao\DataContainer;
use \Contao\FrontendUser;
use \Contao\ModulePersonalData;
/**
* Store the date when the account is submited
* @Callback(table="tl_member", target="config.onsubmit")
*/
class myDateOnsubmitCallbackListener
{
public function onSubmitCallback(DataContainer $dc): void
{
$timetou = time();
$db = \Contao\System::getContainer()->get('database_connection');
$count = $db->executeStatement('UPDATE tl_member SET myDate = ? WHERE id = ?', array($timetou, $dc->id));
}
}
Hinweise sind herzlich willkommen.
Lesezeichen