Ergebnis 1 bis 9 von 9

Thema: eigenes Widget erstellen

  1. #1
    Contao-Nutzer Avatar von Kati
    Registriert seit
    23.06.2009.
    Beiträge
    5

    Standard eigenes Widget erstellen

    Hi,

    ich bin dabei ein eigenes Widget zu erstellen:

    es sollen 2 Eingabefelder dargestellt werden,
    eins für ein Startdatum und das zweite für ein Enddatum eines Events,

    PHP-Code:
        $arrFields = array (
              ...
             
    'date' => array
           (
                
    'name'    => 'date',
            
    'label'        => $GLOBALS['TL_LANG']['tl_module_eventmanager_events'['date'],
            
    'inputType'    => 'event_date',
            
    'eval'        => array('mandatory'=>true'maxlength'=>10'rgxp'=>'date' )
          ),  .... 
    im Widget (EventDate.php) :

    PHP-Code:
    generate(){
         return  
    sprintf('<input type="text" name="%s" id="ctrl_%s"  class="text%s"value="%s"/>',
                    
    $this->strName '_start',
                    
    $this->strId '_start',
                    (
    strlen($this->strClass '_start') ? ' ' $this->strClass '_start' ''),
                    
    specialchars($start_date),
                    
    $this->getAttributes()) . $this->addSubmit().
                    
    sprintf("<script type=\"text/javascript\">...</script>",
                    
    $this->strId '_start' ,          
                                    
    $GLOBALS['TL_CONFIG'['dateFormat'],utf8_encode('ä'))

                    .
    sprintf('<input type="text" name="%s" id="ctrl_%s" class="text%s" value="%s"%s />',
                    
    $this->strName '_end',
                    
    $this->strId '_end',
                    (
    strlen($this->strClass '_end') ? ' ' $this->strClass '_end' ''),
                    
    specialchars($end_date),
                    
    $this->getAttributes()) . $this->addSubmit().
                    
    sprintf("<script type=\"text/javascript\">...</script>",
                    
    $this->strId '_end',
                                   
    $GLOBALS['TL_CONFIG'] ['dateFormat'],utf8_encode('ä'));

    Wie kann ich Prüfen, ob Richtige Daten eingegeben wurden
    /wie kann ich auf die Eigenschaften zugreifen?
    Bzw. sind in einem Field überhabt zwei Eingabefelder möglich?

  2. #2
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.669
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Kati,

    wo würdest du dieses Widget denn verwenden? Frontend/Backend? Formulargenerator/eigenes Modul?

    Das Standard-Textfeld kann auch zwei Felder anzeigen, indem du eval->multiple = true und eval->size = 2 setzt.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  3. #3
    Contao-Nutzer Avatar von Kati
    Registriert seit
    23.06.2009.
    Beiträge
    5

    Standard

    ich würde es im Frontend als eigenes Modul anwenden

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.669
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Nun wäre noch die Frage was du validieren möchtest. Sicherlich müsste im Feld ein Datum stehen, oder? Das ginge ja mit rgxp=date. Allerdings wird damit nicht geprüft ob es zwei verschiedene Daten sind und das letztere später ist.

    Du kannst entweder mit einem eigenen rgxp und dem addCustomRegexp Hook arbeiten, oder vermutlich besser ein neues Widget erstellen, welches auf dem FormTextField basiert. Ich hatte leo einst ein Ticket geschrieben das FormTextField sollte auch mehrere Felder unterstützen (nicht nur sein Backend-Äquivalent "TextField"), aber ich weis nicht ob das schon drin ist.

    Falls nicht, müsstest du die generate()-Funktion überschreiben sowie den validator(). Hier ein Beispiel:


    PHP-Code:
    class FormEventDate extends FormTextField
    {

        protected function 
    validator($varInput)
        {
            
    $objDate = new Date($varInput['start']);
            
    $intStart $objDate->tstamp;

            
    $objDate = new Date($varInput['end']);
            
    $intStop $objDate->tstamp;

            if (
    $intStart >= $intStop)
            {
                
    // $GLOBALS['TL_LANG']['ERR']['eventDate'] = 'Das erste Datum muss kleiner sein als das zweite Datum!
                
    $this->addError($GLOBALS['TL_LANG']['ERR']['eventDate']);
            }

            return 
    $varInput;
        }

        public function 
    generate()
        {
            
    // Zwei Textfelder zurückgeben, wie im Beispiel. Allerdings darf der Name der Felder nicht _start und _end sein, denn sonst werden diese nicht übernommen!
            // Feldnamen: $this->strName . '[start]' bzw. $this->strName . '[end]';
        
    }

    Geändert von andreas.schempp (28.06.2009 um 06:10 Uhr)
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Nutzer Avatar von TheGeek
    Registriert seit
    21.06.2009.
    Beiträge
    97

    Standard

    Ich habe auch ein eigenes Widget für das Frontend erstellt. Wie kann ich jetzt einen Submit Button machen der meine Daten in eine Tabelle einträgt, eine Bestätigungsemail versendet und und mich anschließend auf eine "Erfolgreich" Seite weiterleitet?
    Life would be easier if I had the source code!

  6. #6
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.669
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ein Widget für's Frontend kannst du im Formulargenerator verwenden. Dort sollte das alles möglich sein, oder?
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  7. #7
    Contao-Nutzer Avatar von TheGeek
    Registriert seit
    21.06.2009.
    Beiträge
    97

    Standard

    Das ist richtig. Und es geht auch wenn man ein tl_form_field hat.

    Danke
    Geändert von TheGeek (10.11.2009 um 10:56 Uhr)
    Life would be easier if I had the source code!

  8. #8
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    6

    Standard

    Hallo, ich möchte auch ein Widget erstellen. Zu Testzwecken habe ich folgendes gemacht:

    1) ein neues Modul angelegt.
    2) dort in der config.php: $GLOBALS['BE_FFL']['myTest'] = "MyTest"; hinzugefügt
    3) Klasse MyTest erstellt, die Widget erweitert (also extends Widget)
    4) generateMethode angepasst. Ausgabe eines <input type="text" ... />

    Resultat war, das alles von der Anzeige her super geklappt hat. Allerdings wollte ich nun den Wert, der in das Feld geschreiben wird speichern. Das hat nicht geklappt.

    5) Bin auf diese Thread gestoßen und habe nicht mehr direkt von Widget geerbt, sondern von FormTextField => ALLES funktioniert!

    Meine Frage: Wieso funktioniert es wenn ich von FormTextField erbe, aber nicht direkt von Widget? Habe mir FormTextField angeschaut, und nichts gefunden/erkannt, was jetzt diese Veränderung ausmacht? Kann mir jemand sagen warum das so ist, bzw. wie der Wert spezifiziert wird, der gespeichert werden soll. Wo finde ich den Code, wo die Daten in die Datenbank geschrieben werden?

  9. #9
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.669
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du musst die Klassenvariable $blnSubmitInput auf true setzen (siehe Widget.php und TextField.php).

    PS: "FormTextField" ist für's Frontend! "TextField" ist das Backend.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Eigenes Template erstellen ?
    Von findetemo im Forum Layout / Templates / Holy Grail
    Antworten: 1
    Letzter Beitrag: 19.07.2010, 17:53
  2. Antworten: 6
    Letzter Beitrag: 11.07.2010, 11:01
  3. Widget von DCA generieren
    Von bubblez im Forum Entwickler-Fragen
    Antworten: 2
    Letzter Beitrag: 22.05.2010, 13:24
  4. 2 Fragen: eigenes Modul erstellen / andere Module mit einbinden
    Von nicknolte im Forum Entwickler-Fragen
    Antworten: 0
    Letzter Beitrag: 06.02.2010, 14:22
  5. Eigenes Template erstellen - Einführung
    Von zozo im Forum Layout / Templates / Holy Grail
    Antworten: 5
    Letzter Beitrag: 21.06.2009, 22:06

Berechtigungen

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