Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Callback nach Klick auf Checkbox bei der Mitglieder Registrierung in FE und BE

  1. #1
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard Callback nach Klick auf Checkbox bei der Mitglieder Registrierung in FE und BE

    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.
    Geändert von stu (12.05.2021 um 10:05 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard

    Hallo

    da ich mit dem Thema leider nicht weiter gekommen bin wollte ich kurz die Frage stellen ob ich bei dem Wunsch ein Feld im Frontend nach dem Speichern automatisch updaten zu lassen (wie oben beschrieben) besser
    - einen Global CallBack, z. B. config.onsubmit oder
    - ein Event ContaoCommunityAlliance\DcGeneral\Event\PostPersis tModelEvent
    verwende.

    Für den Callback spricht, das dieser nur gezielt für eine Tabelle aufgerufen wird.
    Wie ist dies bei PostPersistModelEvent?

  3. #3
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard

    Ich habe das nun als Callback für mich so gelöst:

    PHP-Code:
    <?php
    // src/EventListener/DataContainer/termsOfUseDateOnsubmitCallbackListener.php
    namespace App\EventListener\DataContainer;

    use 
    Contao\CoreBundle\ServiceAnnotation\Callback;
    use 
    Symfony\Component\HttpFoundation\Request
    use 
    Symfony\Component\HttpFoundation\Response
    use 
    Contao\DataContainer;
    use \
    Contao\FrontendUser;
    use \
    Contao\ModulePersonalData;

        
    /**
         * @Callback(table="tl_member", target="config.onsubmit")
         */

    class termsOfUseDateOnsubmitCallbackListener
    {
        public function 
    onSubmitCallback(...$arguments): void
        
    {
            if (
    $arguments[0] instanceof DataContainer){
                
    $myScope TL_MODE;
                
    $dc $arguments[0];
                
    $lastname $dc->activeRecord->lastname;
                
    //
            
    } else {
                
    $myScope TL_MODE;
                
    $member $arguments[0];
                
    $module =  $arguments[1];
                
    $actMember $member->getInstance();
                
    $lastname $actMember->lastname;
                
    //
            
    }
    Scheint so zu funktionieren

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •