Ergebnis 1 bis 6 von 6

Thema: [Geändert] Textfeldern kann dynamisch kein Default-Wert zugeordnet werden

  1. #1
    Contao-Nutzer
    Registriert seit
    02.09.2009.
    Beiträge
    30

    Standard [Geändert] Textfeldern kann dynamisch kein Default-Wert zugeordnet werden

    Eigentlich würde ich gerne Default-Werte für Backend-Formulare definieren um mir Arbeit zu sparen. Dafür benötige ich aber eine Benachrichtigung über das Laden von BE-Modulen. Der Hook loadFormField macht das für FE-Formulare, für BE-Formulare aber anscheinend nicht.

    Kann ich das realisieren und wenn ja, wie?
    Geändert von yxcvbnm (18.01.2010 um 07:57 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    02.09.2009.
    Beiträge
    30

    Standard

    Ok, Teilproblem ist gelöst. Nun gibt es aber ein Neues. Ich möchte dynamisch einen Default-Wert für Textfelder bestimmen. Die Callback-Funktion onLoadCallback ist hier mein sinnvoller Helfer.

    Allerdings lassen sich keine default-Werte für Textfelder angeben.
    Beispiel:
    In den tl_calendar_events gibt es im Formular das Textfeld 'title'.
    PHP-Code:
        'fields' => array
        (
            
    'title' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['title'],
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'inputType'               => 'text',
                
    'eval'                    => array('mandatory'=>true'maxlength'=>255)
            ), 
    Nun möchte ich diesem dynamisch einen Standardwert zuordnen.
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_calendar_events']['config']['onload_callback'] = array
    (
        array(
    'myclass''onLoadCallback')
    ); 
    Diese Klasse existiert selbstverständlich auch und ist im (kurzen) Beispiel so implementiert:
    PHP-Code:
    class myclass extends Backend {
        public function 
    onLoadCallback($dcTable
        {
            
    $default 'test-title';
            
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['title']['default'] = $default;
            
    //$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['title']['inputType'] = 'select';
        

    Wenn ich den default-Wert schon in der dca statisch festlegen könnte, dann wäre das überhaupt kein Problem, das funktrioniert auch. Wenn ich allerdings den Default-Wert über die Callback-Funktion setzen möchte, dann schlägt der Versuch fehlt.
    Die Umdefinition des inputType auf 'select' klappt einwandfrei - nur zum Test.

    Woran kanns also liegen, dass mir kein Default-Wert eingetragen wird... funktioniert das nur bei einem Textfeld nicht?

  3. #3
    Contao-Nutzer
    Registriert seit
    02.09.2009.
    Beiträge
    30

    Standard

    dank user lindesbes ist ein workaround dafür entstanden. der callback sieht nun folgendermaßen aus:

    PHP-Code:
        public function onLoadCallback($dcTable
        {
            
    $arrDefault = array('title'    => 'DefaultValue oder sonstwas');
            
    $eventID $this->Input->get('id');
            
    $sqlDefaultQuery $this->Database->prepare('SELECT title FROM tl_calendar_events WHERE id=?')->limit(1)->execute($eventID);

            if (!
    $sqlDefaultQuery->title)
            {
                
    $sqlDefault $this->Database->prepare('UPDATE tl_calendar_events %s WHERE id=?')->set($arrDefault)->execute($eventID);
            }
        } 
    erklärung: durch auswahl eines "neues element erstellen" - in dem fall ein event - wird ein neues datenbankobjekt angelegt. beim laden des be-formulars für events wird dieses ausgelesen und ein default-wert macht dann natürlich keinen sinn mehr - er wird ignoriert. deshalb wird hier der default-wert im nachhinein gesetzt (und dann auch entsprechend ausgelesen).

    neues problem:
    aus meinem vorherigen code ergabs sich allerdings ein sehr merkwürdiges verhalten (siehe code). der default-wert ist nun nicht mehr 'DefaultValue oder sonstwas', sondern 'test-title'. wie ist das zu erklären?
    hier scheint die erklärung von oben nicht mehr sinnvoll zu sein - ein sehr merkwürdiges verhalten.

    PHP-Code:
        public function onLoadCallback($dcTable
        {
            
    $default 'test-title';
            
    $arrDefault = array('title'    => 'DefaultValue oder sonstwas');
            
    $eventID $this->Input->get('id');
            
    $sqlDefaultQuery $this->Database->prepare('SELECT title FROM tl_calendar_events WHERE id=?')->limit(1)->execute($eventID);

            if (!
    $sqlDefaultQuery->title)
            {
                
    $sqlDefault $this->Database->prepare('UPDATE tl_calendar_events %s WHERE id=?')->set($arrDefault)->execute($eventID);
            }
            
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['title']['default'] = $default;
        } 

  4. #4
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Ich hab sowas letzte Woche auch umgesetzt. Du kannst das Config-Array nicht im Callback verändern.

    Du musst einfach die DB-Felder updaten.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  5. #5
    Contao-Nutzer
    Registriert seit
    02.09.2009.
    Beiträge
    30

    Standard

    @toflar: hehehe, das habe ich ja gerade oben beschrieben.
    trotzdem bleibt die frage offen, warum letztgenanntes "problem" nach wie vor besteht.

  6. #6
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Ah du hast dann testweise trotzdem nochmals via Config-Array versucht?

    Öh, dann bin ich da echt auch überfragt. Merkwürdig
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Bilder werden beim hochladen geändert?
    Von mauki im Forum Bilder/Dateien
    Antworten: 5
    Letzter Beitrag: 01.11.2009, 22:34
  2. Language-File geändert - jetzt kein Zugriff mehr auf Backend
    Von alphabeet im Forum Installation / Update
    Antworten: 2
    Letzter Beitrag: 07.07.2009, 09:52

Lesezeichen

Lesezeichen

Berechtigungen

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