Ergebnis 1 bis 3 von 3

Thema: [efg] + [sessionform] für Event-Eingabe im Frontend?

  1. #1
    Contao-Nutzer
    Registriert seit
    22.06.2009.
    Ort
    Bremen
    Beiträge
    229

    Standard [efg] + [sessionform] für Event-Eingabe im Frontend?

    Hallo zusammen,

    ich suche eine Möglichkeit, mit der ich als php-Dilettant Frontend-Usern die Eingabe von Events zu ermöglichen kann.
    Eine Idee wurde vor kurzem hier vorgestellt, aber das übersteigt meine Fähigkeiten.

    Folgende Idee:
    1) Eingabe der Daten über efg. Eingabe beenden durch "Überprüfen"-Button.
    2) Ausgabe der Daten auf der zweiten Seite (sessionform) und dabei über die Berechnen-Funktionen Konvertierung des Datumformates. Vorgang abschließen durch "Abschicken"-Button.
    3) Speichern der Werte in der Event-Datenbank.

    Kann das funktionieren?
    Welche Formel/Formeln brauche ich für die Konvertierung? In php?

    Herzliche Grüße
    Fryd

  2. #2
    Contao-Nutzer Avatar von Gausi
    Registriert seit
    04.09.2009.
    Beiträge
    149

    Standard

    Hallo,
    ich bin selber PHP-Dilettant, hab dass aber soweit hinbekommen - ich bin nur noch nicht sicher, ob das "sicher" ist.

    Auf dem Formular habe ich Textfelder für Titel (heißt bei mir title_copy), startDate, endDate, startTime, endTime (jeweils mit Eingabeprüfung auf Datum bzw. Zeit), zwei Textareas für teaser und details, ein SelectMenu (ort) für die css-Klasse und eine CheckBox für published mit dem Wert 1. Zusätzlich ein verstecktes Feld pid (für die ID des Kalenders, in das der Termin eingetragen werden soll) und ein Feld "alias_copy".
    In den Formular-Optionen habe ich "Daten im Modul "Formular-Daten" speichern" aktiviert (aber nicht direkt in die tl_calender_events)

    Das läuft bei mir dann alles über den efg, mit einem Hook auf processEfgFormData. Dazu in der Datei system/config/dcaconfig.php so eine Zeile ergänzen

    PHP-Code:
    $GLOBALS['TL_HOOKS']['processEfgFormData']['TerminForm'] = array('eventEfgFuncs''processSBData'); 
    Den Wert 'TerminForm' kannst du frei wählen, ebenso das auf der rechten Seite. Das muss dann aber auch im Code unten entsprechend verändert werden (und afaik auch der Dateiname).

    unter modules/efg habe ich dann eine Datei eventEfgFuncs.php angelegt, die dann die Werte aus dem Formular konvertiert und in den Kalender schreibt.

    Damit später über das Modul "Formulardaten auflisten" auch eine Änderung im Kalender möglich ist, verpasse ich dem Event ein eigenes alias (titel säubern und timestamp dranhängen), was ich auch in den Formulardaten im Feld alias_copy speichere. Beim Bearbeiten kann ich über alias_copy das passende Event im Kalender (hat bei mir die pid 7) finden und updaten.

    Kein Garantie, dass das alles richtig ist, aber bisher waren meine Tests mit der Version recht erfolgreich.

    PHP-Code:
    <?php
        
    class eventEfgFuncs extends Backend
        
    {

            public function 
    processSBData($arrToSave$arrFiles$intOldId, &$arrForm)
            {
            if (
    $arrForm['id'] == '21')
            {

                    
    $startDate strtotime($arrToSave['startDate']);

                    if (
    $intOldId == 0)
                    {
                            
    // create new alias
                         
    $alias str_replace(' ','-',($arrToSave['title_copy'])).time();
                         
    $alias preg_replace('/[^(\x20-\x7F)]*/',''$alias);
                        
    $arrToSave['alias_copy'] = $alias;
                    }
                    else
                    {
                            
    // use existing alias
                               
    $alias $arrToSave['alias_copy'];
                    }

                    
    $arrEvent = array
                            (
                             
    'pid' => $arrToSave['pid'],
                             
    'alias' => $alias,
                             
    'author' => 1,
                             
    'tstamp' => $startDate,
                             
    'title' => $arrToSave['title_copy'],
                             
    'teaser' => $arrToSave['teaser'],
                             
    'details' => $arrToSave['details'],
                             
    'startDate' => $startDate,
                             
    'cssClass' => $arrToSave['ort'],
                             
    'published' => $arrToSave['published']
                            );

                    
    $trimmed trim($arrToSave['endDate']);
                    if (
    $trimmed != '')
                    {
                             
    $endDate strtotime($arrToSave['endDate']);
                             
    $arrEvent['endDate'] = $endDate;

                             
    $endDateStr $arrToSave['endDate'];
                    }
                    else
                    {
                             
    $arrEvent['endDate'] = NULL;
                             
    // needed later
                             
    $endDateStr $arrToSave['startDate'];
                
    //$endDate = strtotime($arrToSave['endDate']);
                    
    }

                    
    $trimmed trim($arrToSave['startTime']);
                    if (
    $trimmed == '')
                    {
                            
    $useTime '';
                             
    $arrEvent['addTime'] = '';
                             
    $arrEvent['startTime'] = $startDate;
                    } else
                    {
                             
    $useTime '1';
                             
    $startTime strtotime($arrToSave['startDate'].' '.$arrToSave['startTime']);
                             
    $arrEvent['addTime'] = '1';
                             
    $arrEvent['startTime'] = $startTime;
                    }

                    
    $trimmed trim($arrToSave['endTime']);
                    if (
    $trimmed == '')
                    {
                            
    $endTime strtotime($endDateStr.' '.$arrToSave['startTime']);
                             if (
    $useTime == '1')
                             {
                                 
    $arrEvent['endTime'] = $endTime;
                             } else
                             {
                                 
    $arrEvent['endTime'] = $endTime//NULL;
                             
    }
                    }
                    else
                    {
                            if (
    $useTime == '1')
                             {
                                 
    $endTime strtotime($endDateStr.' '.$arrToSave['endTime']);
                                
    $arrEvent['endTime'] = $endTime;
                             }
                    }

                    if (
    $intOldId == 0)
                    {
                             
    // create new entry
                             
    $objInsert $this->Database->prepare('INSERT INTO tl_calendar_events %s')->set($arrEvent)->execute();
                    }
                    else
                    {
                
    // update existing entry
                                 
    $objUpdate $this->Database->prepare("UPDATE tl_calendar_events %s WHERE pid='7' AND alias='".$alias."'")->set($arrEvent)->execute();
                    }
             }

             return 
    $arrToSave;

            }
        }
    ?>
    All of this has happened before - but the question remains: Does all of this have to happen again?

  3. #3
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Hallo Gausi,

    Ich habe deinen Tipp aus dem anderen Thread befolgt und geprüft.

    Das Ganze wird updatesicher, wenn du anstatt /system/config/dcaconfig.php anzupassen, die betreffende Zeile in die Datei system/modules/x_MeinModul/config/config.php einfügst, also z.B.
    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    $GLOBALS['TL_HOOKS']['processEfgFormData']['TerminForm'] = array('eventEfgFuncs''processSBData');
    ?>
    Und deinen PHP-Code in system/modules/x_MeinModul/eventEfgFuncs.php ablegst.

    Wichtig: das Modul x_MeinModul muss einen Namen haben, der alphabetisch hinter dem EFG liegt, da Contao die Module in dieser Reihenfolge liest. Falls du sowieso schon ein eigenes Modul auf deiner Seite hast, dann kannst du die Datei und die Anpassung der config.php natürlich auch darin machen - aber vielleicht ist die Funktionalität ja auch generell interessant (jedenfalls nach der Zahl der Threads zu diesem Thema zu urteilen).

    Gruß,
    folkfreund

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Event-Liste verweist auf mehrere Event-Leser
    Von Kai_F im Forum Nachrichten/Events/FAQ
    Antworten: 10
    Letzter Beitrag: 06.04.2010, 14:36
  2. [sessionform] Übersicht der Eingabe
    Von Andrea im Forum Sonstige Erweiterungen
    Antworten: 3
    Letzter Beitrag: 24.02.2010, 08:36
  3. [conditionalforms] zusammen mit [sessionform]
    Von AndreasGartz im Forum Sonstige Erweiterungen
    Antworten: 3
    Letzter Beitrag: 17.12.2009, 06:29

Lesezeichen

Lesezeichen

Berechtigungen

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